HinemosDBに直接アクセスする
投稿日: / 更新日:
HinemosのDBはPostgreSQLですが、クライアント上から見ることのできる情報は、実はほとんどそのままの形でDBに蓄積されています。例えば、Hinemosクライアント上から、条件を細かく絞り込んでイベント履歴を抽出したい場合、あるいは監視のスコープをノードに分解して、ノード毎の監視の割り当てを見たい場合など、Hinemosクライアント上では難しい場合でも、DBへ直接アクセスすれば案外簡単に取得できたりします。
とはいえ、本番稼働中のHinemosDBに直接アクセスするのは、オペミスの危険性や余計な負荷の上昇につながりますので避けるべきです。このような場合には、別のマシン上にやはりPostgreSQLを構築し、そちらへHinemosDBをインポートして使用することができます。
HinemosにはDBダンプ用のツールが用意されていますが、それを使用してダンプしたファイルは、実際のところPostgreSQLのダンプファイルですので、PostgreSQLの流儀でインポートすることが可能です。以下はその例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[atomitech@agent01 ~]$ psql -U hinemos -d hinemos -f hinemos_pgdump.2011-07-03_230000 SET SET SET SET SET psql:hinemos_pgdump.2011-07-03_230000:15: ERROR: データベース"hinemos"はすでに存在します ALTER DATABASE psql (8.4.7) データベース "hinemos" に接続しました。. SET SET SET SET SET SET SET SET CREATE TABLE ALTER TABLE : REVOKE REVOKE GRANT GRANT [atomitech@agent01 ~]$ |
上記の例では、あらかじめ別マシン上に構築しておいたPostgreSQL上に、HinemosDBと同じく”hinemos”ユーザと”hinemos”データベースを作成し、それへ向けてダンプファイルをインポートしている様子です。インポートが完了しても、単なるデータベースですので、監視やジョブが始まることはなく、じっくりとデータを確認することができます。例えば以下のSQLでは、イベント履歴(cc_event_log)から”MON-PING”という監視項目ID(monitor_id)のレコードを抽出し、出力日時(generation_date)の順にソートして出力しています。
1 2 |
hinemos=# select monitor_id, scope_text, message from cc_event_log hinemos=# where monitor_id = 'MON-PING' order by generation_date; |
SQLを実行すると、以下のような感じで出力されます。
あるいは、次のようなSQLを発行すると、現在有効になっている全ての監視項目の一覧を出力できるかもしれません(まだ検証が十分でないため、このSQLをそのまま業務で使用しないでください)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
select m, f from (select monitor_id as m, facility_id as f from cc_monitor_info mon, qrtz_triggers qrtz where mon.monitor_id = qrtz.trigger_name and qrtz.trigger_state in ('WAITING', 'ACQUIRED') union select monitor_id as m, facility_id as f from cc_syslog_monitor_rule where valid_flg = 1 union select label as m, target_facilityid as f from cc_collector_profile union select monitor_id as m, facility_id as f from cc_snmp_trap_info where valid_flg = 1) as t order by m, f; m | f ----------------------------+-------------- MON-AGENT | REGISTERED MON-HTTP-DOCROOT-AGENT01 | SC-WEB MON-HTTP-DOCROOT-MANAGER01 | SC-WEB MON-LOG-DANGER | REGISTERED MON-LOG-WARN | REGISTERED MON-PING | REGISTERED MON-PORT-SSH | SC-SSH MON-PROC-HTTPD | SC-WEB-HTTPD MON-PROC-ORA | SC-DB-ORA MON-RES-CPU | REGISTERED MON-RES-FS-ROOT | REGISTERED MON-RES-MEM | REGISTERED MON-RES-SWAP | REGISTERED MON-SNMP-UPTIME | REGISTERED MON-SQL-ORA-TBLSPC-USAGE | SC-DB-ORA MON-TRAP-GENERIC | REGISTERED (16 rows) |
Hinemosクライアント上のパーツとHinemosDBのカラムを細かく突き合わせてみると、何となく関連性が見えてきたりして、面白いかもしれません。