MySQLでAUTO_INCREMENTを任意の数字に変更する

Redmine のチケットを復活させた ときに、誤ってissuesテーブルに違うtsvを食わせてしまい、ゴミデータを追加してauto_incrementの数字を大きくしてしまった。

手動で直したので、そのときの手順。

手順

状況確認

Auto_increment列をみる。

show table status like 'issues'\G;
mysql> show table status like 'issues'\G;
*************************** 1. row ***************************
           Name: issues
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 4713
 Avg_row_length: 1004
    Data_length: 4734976
Max_data_length: 0
   Index_length: 1376256
      Data_free: 9437184
 Auto_increment: 13008
    Create_time: 2013-09-12 16:06:01
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)

ERROR: 
No query specified

昨日まで5000くらいだったのに…

データをバックアップしておく

壊れたデータなのでいらないと思うけど、一応バックアップしておく。

mysql -u redmine -p -D redmine_db -e'select * from issues where id > 5348;' > issues.tsv

AUTO_INCREMENTを変更する

AUTO_INCREMENTで指定した数字より大きいidがなければ、正しく変更されるはず。

ALTER TABLE issues AUTO_INCREMENT = 5348;

変更できてなくても、Query OKが返ってくるので注意。しっかり確認すべし。

mysql> ALTER TABLE issues AUTO_INCREMENT = 5348;
Query OK, 5068 rows affected (0.98 sec)
Records: 5068  Duplicates: 0  Warnings: 0

Redmineの誤って削除したチケットをバックアップから復活させた話

参考

基本的にここの記事の通りです。

http://daily-postit.blogspot.jp/2012/12/blog-post.html

前提

DBもファイルもバックアップを残してあること。

手順

ステップは2つ

  • データの復旧
  • ファイルの復旧

データの復旧

復旧するデータのあるテーブル

issues
journals
journal_details
watchers
attachments
issue_relations
custom_values

追記:custom_values が抜けてた。以下のSQLは追記済。

SQL的にはこんな感じ。

select * from issues where id = 4987;
select * from journals where journalized_id = 4987;
select jd.* from journal_details jd INNER JOIN journals j ON journal_id = j.id where journalized_id = 4987;
select * from watchers where watchable_id = 4987;
select * from attachments where container_id=4987;
select * from issue_relations where issue_from_id=4987 OR issue_to_id=4987;
select * from custom_values where customized_id=4987;

実行したコマンド

こんな感じ。シェルスクリプトにすれば再利用できるんじゃないかな!再利用する場面に遭遇したくないけど!!

Export

mkdir /tmp/201309
cd /tmp/201309
mysql -u root -D redmine_20130911_temp -e'select * from issues where id = 4987;' > issues.tsv
mysql -u root -D redmine_20130911_temp -e'select * from journals where journalized_id = 4987;' > journals.tsv
mysql -u root -D redmine_20130911_temp -e'select jd.* from journal_details jd INNER JOIN journals j ON journal_id = j.id where journalized_id = 4987;' > journal_details.tsv
mysql -u root -D redmine_20130911_temp -e'select * from watchers where watchable_id = 4987;' > watchers.tsv
mysql -u root -D redmine_20130911_temp -e'select * from attachments where container_id=4987;' > attachments.tsv
mysql -u root -D redmine_20130911_temp -e'select * from issue_relations where issue_from_id=4987 OR issue_to_id=4987;' > issue_relations.tsv
mysql -u root -D redmine_20130911_temp -e'select * from custom_values where customized_id=4987;' > custom_values.tsv

Import

/tmp/201309/のファイルからINFILEしているのは、mysqlユーザーからファイルにアクセスできる必要があるため。

mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/issues.tsv' INTO TABLE issues IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/journals.tsv' INTO TABLE journals IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/journal_details.tsv' INTO TABLE journal_details IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/watchers.tsv' INTO TABLE watchers IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/attachments.tsv' INTO TABLE attachments IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/issue_relations.tsv' INTO TABLE issue_relations IGNORE 1 LINES;"
mysql -u root -D redmine_db -e"LOAD DATA INFILE '/tmp/201309/custom_values.tsv' INTO TABLE custom_values IGNORE 1 LINES;"

ファイルの復旧

ファイル名を調べる。

mysql> select disk_directory, disk_filename from attachments where container_id=4987;
+----------------+----------------------------------------------------+
| disk_directory | disk_filename                                      |
+----------------+----------------------------------------------------+
| 2013/08        | 130805171804_01_init.sql                           |
| 2013/08        | 130805203239_d8d397a2800db492580e9f034275dab1.xls  |
| 2013/08        | 130806142525_fc0be408d4ccbf8d79b9617874e85a6e.xlsx |
| 2013/08        | 130809181036_02_create_view.sql                    |
| 2013/08        | 130820112759_mail.sql                              |
| 2013/09        | 130903194816_fc0be408d4ccbf8d79b9617874e85a6e.xlsx |
+----------------+----------------------------------------------------+

あとはバックアップしておいたファイルから、filesディレクトリにコピーすればOK.

sudo cp -p opt/redmine/files/2013/08/130805171804_01_init.sql /opt/redmine/files/2013/08/
sudo cp -p opt/redmine/files/2013/08/130805203239_d8d397a2800db492580e9f034275dab1.xls /opt/redmine/files/2013/08/
sudo cp -p opt/redmine/files/2013/08/130806142525_fc0be408d4ccbf8d79b9617874e85a6e.xlsx /opt/redmine/files/2013/08/
sudo cp -p opt/redmine/files/2013/08/130809181036_02_create_view.sql /opt/redmine/files/2013/08/
sudo cp -p opt/redmine/files/2013/08/130820112759_mail.sql /opt/redmine/files/2013/08/
sudo cp -p opt/redmine/files/2013/08/130903194816_fc0be408d4ccbf8d79b9617874e85a6e.xlsx /opt/redmine/files/2013/08/

復旧後のトラブル

なにが原因か不明だけど、復旧作業の翌日にチケットを新規発行したら、チケットのidが昨日まで5000くらいだったのが、いきないり13000とかに!

思い出した!issuesにLOAD DATA INFILEのクエリー投げるときに、間違えて違うtsvを食わせちゃったんだ。自分が原因でよかった。

issuesテーブルみたら、idが飛び飛びになって、なんか変なデータが20行くらい増えてる。 手動でいらないレコード消してissuesテーブルのauto_increment直して解決させたけど、イリーガルなことしたらDB含めて全体をリスタートするとかしたほうが良さげ。

Shrewsoft VPN clientをMacでQTのGUIなしで動かす話

要約

Shrewsoft VPN clientはLinux/BSD/Mac向けのソースが公開されてるので、自分でコンパイルすればQtなしで動くバイナリが作れる。その場合はQtないから当然CUIなので、ターミナルから使うよ。

背景

無料のVPNクライアントとしてたぶん人気だと思うShrewsoft VPN Client。Macで動かしたいひとはたぶんこの辺りをみて、QtだのTUN/TAP driverだのいろいろ入れて、ようやくdmgからインストールして動かしてると思う。

http://ulaptech.blogspot.jp/2012/11/shrew-soft-vpn-client-for-mac-os-x.html http://blog.livedoor.jp/kerorou/archives/28739240.html

でも、僕はQtとかあまり使わないもの/詳しくないものをインストールしたくなかったのでいろいろ見てたら、Linux/BSD版もあったので、そっちで動かせるんじゃないかと試行錯誤してたら、うまいこと動いてくれたので記録を残しておく。

MacにビルトインのVPNもあるんだからそれを使うのが一番綺麗なんだけど、ビルトインVPNクライアントからの接続方法がわからんかった。。。

ちなみにVPNの対向先はJuniper SSG5。

手順

  1. Cmakeをインストール
  2. ソースをダウンロード & ビルド
  3. ファイアウォールでikedを許可
  4. 接続

cmakeをインストール

ikeはビルドするのにCmakeを使ってるみたいなので、事前にインストールする。手軽にhomebrew使った。

sudo brew install cmake

ソースをダウンロード & ビルド

https://www.shrew.net/download/ike からStableの最新をダウンロード。 展開したら、以下のコマンドを実行していく。インストール先は /usr/local/ にしたけど、

cd Download/ike
cmake -DNATT=YES -DCMAKE_INSTALL_PREFIX=/usr/local/

ファイアウォールでikedを許可

Macのビルトインファイアウォールが有効になっている場合、トンネル接続時のnegotiationがタイムアウトで失敗する。 上記の通りにインストールすると、/usr/local/sbin/ikedが存在すると思うので、これをファイアウォールの許可リストに入れる。

と思ったのだけど、/usr以下はFinderからはそのままでは見えないのね ( ;゚皿゚)ノシΣ フィンギィィーーッ!!! ってなりかけたけど、一時的に移動 -> フォルダへ移動/usrを開いて、サイドバーに追加して事なきを得た。

http://d.hatena.ne.jp/testnoda/20120515/1337069061

問題と解決

問題と解決 1: failed to attach to key daemon

$ ikec -r 'hogehoge.vpn' -a
ii : ## : VPN Connect, ver 2.2.0
## : Copyright 2012 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
!! : failed to attach to key daemon

ikedを再起動しよう!!!

問題と解決 2: peer config failed

$ ikec -r 'hogehoge.vpn' -a
ii : ## : VPN Connect, ver 2.2.0
## : Copyright 2012 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
>> : attached to key daemon ...
!! : peer config failed
>> : detached from key daemon

クライアントとデーモンのバージョンが違うとこれがでる。以前にdmgで提供されているパッケージをインストールしていませんか? その場合、/usr/bin/ikecというバイナリが置いてあるのでこいつが邪魔をしてます。上記の通りにインストールしてあれば、正しいikec/usr/local/bin/ikecにあると思うので、/usr/bin/ikecは消しましょう。

どうでもいいけど、/usr/bin/ikecはよくわからんライブラリにリンクが張られているな。なんだろ。

$ otool -L /usr/bin/ikec
/usr/bin/ikec:
    /Users/mgrooms/ike/head/source/libike/ShrewSoftIke.framework/Versions/2.2.0/ShrewSoftIke (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/libidb/ShrewSoftIdb.framework/Versions/2.2.0/ShrewSoftIdb (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/libith/ShrewSoftIth.framework/Versions/2.2.0/ShrewSoftIth (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/liblog/ShrewSoftLog.framework/Versions/2.2.0/ShrewSoftLog (compatibility version 2.2.0, current version 2.2.0)
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
    /usr/lib/libedit.2.dylib (compatibility version 2.0.0, current version 2.11.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

問題と解決 3: negotiation timout occurred

ii : ## : VPN Connect, ver 2.2.1
## : Copyright 2013 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
>> : attached to key daemon ...
>> : peer configured
>> : iskamp proposal configured
>> : esp proposal configured
>> : client configured
>> : local id configured
>> : remote id configured
>> : pre-shared key configured
ii : bringing up tunnel ...
!! : negotiation timout occurred
ii : tunnel disabled
>> : detached from key daemon

ファイアウォールが閉じてると思う。上記の手順でikedを許可しよう。 ちなみにこのケースの場合は/var/log/iked.logにこんなログが出てるはず。

13/09/05 12:48:04 DB : phase1 resend event scheduled ( ref count = 2 )
13/09/05 12:48:14 -> : resend 1 phase1 packet(s) [0/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:24 -> : resend 1 phase1 packet(s) [1/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:34 -> : resend 1 phase1 packet(s) [2/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:44 ii : resend limit exceeded for phase1 exchange
13/09/05 12:48:44 ii : phase1 removal before expire time
13/09/05 12:48:44 DB : phase1 deleted ( obj count = 0 )
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : removing tunnel config references
13/09/05 12:48:44 DB : removing tunnel phase2 references
13/09/05 12:48:44 DB : removing tunnel phase1 references

それでもうまくいかないときは

log_level debug;

にして、ikedのログをみるのがいいです。

https://www.shrew.net/support/VPN_Bug_Report_Unix

Sails.js の res.view() でのviewファイル指定の仕方の話

Sails.js のviewは、デフォルトではURLから自動で解決して任意のviewファイルを表示してくれる。 けど、自分で指定して任意のファイルを使う場合で少しハマったので記録しておく。

参考ディレクトリ構成

views
├── 404.ejs
├── 500.ejs
├── foo
│   ├── hoge.ejs
│   └── index.ejs
├── error.ejs
├── home
│   └── index.ejs
├── layout.ejs

ケース1

foo/hoge へのリクエストを受けた場合で、デフォルトでは、 foo/hoge.ejs がviewに使用される。 もし、 foo/index.ejs を使用したい場合、

res.view("foo/index");

と指定する。 http://sailsjs.org/#!documentation/views

ケース2

ここで、もし error.ejs を指定したい場合、以下の2つは等価に見えるけど挙動が違う。

res.view("error");
res.view("./error");

後者のほうだとうまく動くけど、前者の場合、以下のようなエラーになる。

verbose: Running res.view(error) method...
verbose: Error finding layout file Error: ENOENT, readdir '/Users/hiroyuki.shirakawa/Development/WORKSPACES/Sails/testProject/views/error/'

ソースコードを読んでみたけど、なんだか七面倒臭そうなことをしており、なんとも処理しずらい。なので、Sails直さないでそのまま使うことにした。

Sails のレイアウトに任意のブロックを追加する話

トップのページだけそのページ用の js とか css とか読ませたいときにどうすればいいのか知りたかったけど、Sails の View のドキュメント http://sailsjs.org/#!documentation/views だと Partial の説明くらいしかなかった。

なので、ちょろっと調べてみたりしたことをまとめる。

Sails はデフォルトのテンプレートは ejs http://embeddedjs.com/ 。で、 ejs は簡単なテンプレート機能 https://code.google.com/p/embeddedjavascript/wiki/Templates しか有していないので、 Sails では ejs-local https://github.com/RandomEtc/ejs-locals というモジュールを追加して、 layout, partial, block という機能を追加している。

layout.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%- title %></title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <%- scripts %>
    <%- stylesheets %>
   <%- blocks.specific_scripts %>
  </head>
  <body>
    <%- body %>
    <script type="text/javascript" src="/js/socket.io.js"></script>
    <script type="text/javascript" src="/js/sails.io.js"></script>
    <script type="text/javascript" src="/js/app.js"></script>
    </body>
</html>
foo/index.ejs
<% script('foo.js') -%>
<% stylesheet('foo.css') -%>
<% block('specific_scripts', '<script type="text/javascript">alert(123);</script>') -%>

<div id="content">
  <h2>It works!</h2>
</div>

で、レンダリングさせると、こんなHTMLが出力されまする。

<!DOCTYPE html>
<html>
  <head>
    <title>my first Sails</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <script src="foo.js"></script>
    <link rel="stylesheet" href="foo.css" />
   <script type="text/javascript">alert(123);</script>
  </head>
  <body>
    
<div id="content">
  <h2>It works!</h2>
</div>

    <script type="text/javascript" src="/js/socket.io.js"></script>
    <script type="text/javascript" src="/js/sails.io.js"></script>
    <script type="text/javascript" src="/js/app.js"></script>
    </body>
</html>

PhantomJSを利用した、1ファイルで動くスクリーンキャプチャーサーバー

PhantomJSの習作。最近、gistしか更新してないな。

PhantomJS: 1.9.1

http://localhost:20001/http://yahoo.co.jp とか叩くと、キャプチャー画像をサーバーのローカルに保存して、同時にbase64エンコードした値をレスポンスとして返します。 これは習作だけど、ちゃんと使えそうなやつは https://github.com/ariya/phantomjs/wiki/Related-Projects にいろいろありますね。

Zabbix-java-gatewayでTomcat7をファイアウォール越しに監視する

以下はVirtualBox上で構築。ホストとはNATでつないで、ゲスト同士は内部ネットワークで接続。

f:id:shrkw:20130702181239p:plain

  • Zabbixサーバー: 192.168.56.2
  • Java Appサーバー: 192.168.56.3

Zabbix関連はyumでzabbix.comのリポジトリから追加。

rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm

openJDKはyumで、Tomcatapache.orgからダウンロード。

Tomcat

RMIでサーバーのIPアドレスを解決できるようにする

http://netbuffalo.doorblog.jp/archives/4446395.html がとてもわかりやすくて助かる。 これはjconsoleだけの問題ではないので、すべからく解決する必要がある。 上記のサイトの通り、選択肢は3つ。

  • 起動オプションで -Djava.rmi.server.hostname=172.16.0.100 を指定
  • 起動オプションで -Djava.rmi.server.useLocalHostName=true を指定して、DNSで解決させる
  • /etc/hosts にホスト名とIPアドレスの紐付けをする

アプリケーションの起動時にRMIのサーバーのIPアドレスが解決されるので、反映には再起動が必要。

setenv.shにjmxremoteまわりの設定を追加

server.xmlのほうでRMIポートを指定するので、ここではポートの指定 [com.sun.management.jmxremote.port] は不要。 [java.rmi.server.hostname], [java.rmi.server.useLocalHostName] については、上記の通り、どこでRMIサーバーのIPアドレスの解決をさせるかによる。hostsで解決させていないのであれば、指定すること。

CATALINA_OPTS="\
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
";
export CATALINA_OPTS;

今回はauthenticateとかなしでやってるけど、本番では認証もSSLも設定する。その場合は以下のようになる。

CATALINA_OPTS="\
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access \
-Dcom.sun.management.jmxremote.ssl=true \
";
export CATALINA_OPTS;

この例では、confの下に jmxremote.password, jmxremote.access のふたつのファイルがあるという設定になっている。passwordファイルについては

でなければならない。 ちなみにそれぞれの内容は以下のような感じ。

$CATALINA_BASE/conf/jmxremote.access

monitorRole readonly

$CATALINA_BASE/conf/jmxremote.password

monitorRole tomcat

http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html

JMXのポートを固定する

JMXが利用しているRMI(?)では2つのポートを使用するが、実行時オプションで [com.sun.management.jmxremote.port] で指定した場合、もうひとつのポートはランダムに使用される。そのため、ファイアウォールで制限された環境ではポートをフルで開くなどしない限り、RMIの疎通ができない。そのため、Tomcatには使用するポートを固定するための措置が存在する。

catalina-jmx-remote.jar を $TOMCAT_HOME/lib に配置

追加のjarが必要。

curl -O http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.41/bin/extras/catalina-jmx-remote.jar

server.xmlにListenerを追加

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

useLocalPorts="true" にすると、リモートから繋ごうとすると java.net.ConnectException connection refused になるので注意。

サービススタート

あとは適当にスタートすればOK。

参考

Zabbix-java-gateway

Zabbixサーバーに同居。/etc/zabbix/zabbix_server.conf みても、複数gatewayが設定できなそうだったし。

JMXで繋がるか試す

コマンドラインJMXクライアントで、とりあえず疎通できるか試す。

curl -O http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar
curl -O http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.41/bin/extras/catalina-jmx-remote.jar

RMIの対向側なんで、catalina-jmx-remote.jarが必要。 こんな感じでclasspathにjarを追加して実行する。
指定するポートはrmiRegistryPortPlatformとして指定した10001だけでよい。rmiServerPortPlatformの10002ポートのほうは、とくに指定しなくても勝手にパケットが通るので、ファイアウォールで10001も10002も許可すること。

java -classpath /usr/sbin/zabbix_java/lib/catalina-jmx-remote.jar:cmdline-jmxclient-0.10.3.jar org.archive.jmx.Client - 192.168.56.3:10001

結果で、MBeanのリストが返ってくればOK.

 Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=HTMLManager
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=Manager
java.lang:type=Memory
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=stock
JMImplementation:type=MBeanServerDelegate
Catalina:context=/host-manager,host=localhost,name=StandardContextValve,type=Valve
(snip)

catalina-jmx-remote.jar を $zabbix_java/lib に配置

さっきダウンロードしたのを、java-gatewayのlibに置く。initスクリプト見たら、ここに置いたら実行時にクラスパスに追加してくれてた。

mv catalina-jmx-remote.jar /usr/sbin/zabbix_java/lib/

zabbix_java_gateway.confは編集しない

/etc/zabbix/zabbix_java_gateway.conf はそのままのでよいようだ。

サービススタート

あとは適当にスタートすればOK。

Zabbixサーバー側

Java Gatewayを設定

/etc/zabbix/zabbix_server.conf に設定を追加。

JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

JMXインターフェースの追加

これで終わり。ホストの追加のときにJMXインターフェースで

192.168.56.3:10001

を追加してやればOK. ここで指定するのも、rmiRegistryPortPlatformとして指定した10001だけ。10001だけなんだけど、上記の通り、rmiServerPortPlatformの10002ポートのほうもパケットが通るので、ファイアウォールで開けておく必要がある。

https://www.zabbix.com/forum/showthread.php?t=27111

JMXの設定の際にクレデンシャルを指定している場合はユーザー名とパスワードを設定する必要がある。でもホストのインタフェース設定では見つからない。では、どこで設定するかというと個別のアイテムで設定する。 https://www.zabbix.com/documentation/doku.php?id=2.0/manual/config/items/itemtypes/jmx_monitoring

マクロを使えるとはいえ、クレデンシャルはホストで指定するほうが素直というのはすでにフォーラムで話題に上がってた。ぼくもそう思う。

https://www.zabbix.com/forum/showthread.php?t=31764

あとは Template JMX Generic とか Template JMX Tomcat 7 のテンプレート[ https://gist.github.com/hgomez/3209196 ]を適用させていいんじゃないかと。

f:id:shrkw:20130702202612p:plain

アイコンが緑になると気持ちいい。

参考