こんにちは、SCSK株式会社の小寺崇仁です。
このブログではZabbixのデータベース内部構成について紹介をしたいと思ってます。
第1弾としてホスト設定を取得するSQLを作成してみます。
はじめに
私はZabbixの構築を主に担当しています。最近はZabbixと外部システムを連携しているお客様が増加傾向にあると感じています。外部システムと連携をしたいお客様にはサポート範囲内である、ZabbixAPIを使用した方法を案内しています。
しかし、Zabbixはオープンソースであり、RDBMSを使用しているため、DBを直接参照することが可能です。DBの知識がある方であれば、容易にデータ抽出ができますので、表の構造とサンプルSQLを記事にしたいと思います。
注意事項
- Zabbixのデータベース内部に関するは情報が少ないです。そのため私が個人的にDBを解析して情報発信を行う非公式情報になります。
- 当社ではZabbixの有償サポートを実施しております。Zabbixのデータベース内部に関する問い合わせはサポート範囲に含まれておらず、本ブログの内容をサポート宛に問い合わせをいただいても回答ができません。
- 個人的に作成したSQLです。自己責任でご利用ください。間違っていた場合イベント等でこっそり教えてください。
テーブル定義(MySQL)
hosts
ホスト情報が格納されるメインのテーブルです。
Field | 日本語名称 | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|---|
hostid | ホストID | bigint unsigned | NO | PRI | NULL | |
host | ホスト名 | varchar(128) | NO | MUL | ||
name | 名前 | varchar(128) | NO | MUL | ||
description | 説明 | text | NO | NULL | ||
templateid | テンプレートID | bigint unsigned | YES | MUL | NULL | |
flags | フラグ | int | NO | 0 | ||
status | ステータス | int | NO | MUL | 0 | 0:有効 1:無効 3:テンプレート |
maintenance_status | メンテナンスステータス | int | NO | 0 | ||
ipmi_authtype | IPMI認証タイプ | int | NO | -1 | ||
ipmi_privilege | IPMI権限 | int | NO | 2 | ||
ipmi_username | IPMIユーザー名 | varchar(16) | NO | |||
ipmi_password | IPMIパスワード | varchar(20) | NO | |||
maintenanceid | メンテナンスID | bigint unsigned | YES | MUL | NULL | |
maintenance_type | メンテナンスタイプ | int | NO | 0 | ||
maintenance_from | メンテナンス開始 | int | NO | 0 | ||
tls_connect | TLS接続 | int | NO | 1 | ||
tls_accept | TLS受け入れ | int | NO | 1 | ||
tls_issuer | TLS発行者 | varchar(1024) | NO | |||
tls_subject | TLSサブジェクト | varchar(1024) | NO | |||
tls_psk_identity | TLS PSKアイデンティティ | varchar(128) | NO | |||
tls_psk | TLS PSK | varchar(512) | NO | |||
proxy_hostid | プロキシホストID | bigint unsigned | YES | MUL | NULL | – |
proxy_address | プロキシアドレス | varchar(255) | NO | |||
auto_compress | 自動圧縮 | int | NO | 1 | ||
discover | ディスカバー | int | NO | 0 | ||
lastaccess | 最終アクセス | int | NO | 0 | ||
custom_interfaces | カスタムインターフェース | int | NO | 0 | ||
uuid | UUID | varchar(32) | NO | |||
name_upper | 名前(大文字) | varchar(128) | NO | MUL |
hosts_gropus
ホストとグループの関連付けが保存されるテーブルです。
Field | 日本語名称 | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|---|
hostgroupid | ホストグループID | bigint unsigned | NO | PRI | NULL | |
hostid | ホストID | bigint unsigned | NO | MUL | NULL | |
groupid | グループID | bigint unsigned | NO | MUL | NULL |
hstgrp
ホストグループが保存されるテーブルです。
Field | 日本語名称 | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|---|
groupid | グループID | bigint unsigned | NO | PRI | NULL | |
name | ホストグループ名 | varchar(255) | NO | MUL | ||
internal | インターナル | int | NO | 0 | ||
flags | フラグ | int | NO | 0 | ||
uuid | UUID | varchar(32) | NO |
interface
インターフェースに関するテーブルです。
Field | 日本語名称 | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|---|
interfaceid | インターフェースID | bigint unsigned | NO | PRI | NULL | |
hostid | ホストID | bigint unsigned | NO | MUL | NULL | |
main | メイン | int | NO | 0 | ||
type | タイプ | int | NO | 1 | ||
useip | IP使用 | int | NO | 1 | ||
ip | IPアドレス | varchar(64) | NO | MUL | 127.0.0.1 | |
dns | DNS | varchar(255) | NO | |||
port | ポート | varchar(64) | NO | 10050 | ||
available | 利用可能 | int | NO | MUL | 0 | |
error | エラー | varchar(2048) | NO | |||
errors_from | エラー発生元 | int | NO | 0 | ||
disable_until | 無効期限 | int | NO | 0 |
サンプルSQL
ホスト取得
SELECT h.hostid ,h.host ,h.name as 表示名 ,CASE h.status WHEN 1 THEN '無効' ELSE '有効' END AS ステータス FROM hosts h WHERE h.status in (0,1);
ホスト+ホストグループ
SELECT h.hostid ,h.host ,h.name as 表示名 ,CASE h.status WHEN 1 THEN '無効' ELSE '有効' END AS ステータス ,hg.name FROM hosts h LEFT JOIN hosts_groups hgs ON h.hostid = hgs.hostid LEFT JOIN hstgrp hg ON hgs.groupid = hg.groupid WHERE h.status in (0,1)
ホスト+インターフェース
SELECT h.hostid AS ホストID ,h.host as ホスト ,h.name as 表示名 ,CASE h.status WHEN 1 THEN '無効' ELSE '有効' END AS ステータス ,CASE i.type WHEN 1 THEN 'Zabbixエージェント' WHEN 2 THEN 'SNMP' WHEN '3' THEN 'IPMI' WHEN '4' THEN 'JAVA' END AS タイプ ,CASE i.main WHEN 1 THEN 'メイン' END AS メイン ,CASE i.useip WHEN 0 THEN 'DNS' ELSE 'IP' END AS 接続方法 ,i.ip AS IPアドレス ,i.dns AS DNS名 ,i.port AS ポート ,s.version AS SNMPバージョン ,s.community AS SNMPコミュニティ ,CASE s.bulk WHEN 1 THEN '有効' END AS SNMPバルク FROM hosts h LEFT JOIN interface i ON h.hostid = i.hostid LEFT JOIN interface_snmp s ON i.interfaceid = s.interfaceid WHERE h.status in (0,1)
最後に
弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★