測試環境為 CentOS 8 x86_64 虛擬機,資料庫為 MariaDB.
透過 Zabbix 的網頁就可以看到目前監控的 Agent 有哪些系統資訊可以查詢,除了透過 Zabbix 的網頁外,有辦法取得這些資料 (RAW Data) 嗎? 可以直接存取資料庫 (下面介紹) 或是透過 API 的方式.
關於安裝 Zabbix Server, Frontend, Agent 請參考以下連結.
- Zabbix Server, Frontend, Agent – https://benjr.tw/103709
- Agent – https://benjr.tw/103741
首先我們要來看有哪些資料可以查詢的, 在 Monitoring / Host 就可以看到建立好的 Zabbix Server 與 Agent.
點選 Monitoring / Latest Data 就可以看到有哪些資訊可以查詢.
我要檢視 CentOS8-1 的 CPU utilization 要檢視資料哪一些資料表.
[root@localhost ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 1264 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> USE zabbix; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
第一步要先查詢 CentOS8-1 這一個 host 的 id 是多少,在 hosts 資料表搜尋 host 欄位可以找到對應,下面可以看到我的 CentOS8-1 hostid 是 10385 (後面會用到).
MariaDB [zabbix]> SELECT hostid FROM hosts WHERE host LIKE 'CentOS8-1'; +--------+ | hostid | +--------+ | 10385 | +--------+ 1 row in set (0.000 sec)
接下來查看 CentOS8-1 (hostid 是 10385) 的 CPU utilization itemid 是多少,這資訊可以在 name 資料表找到,下面可以看到 CPU utilization itemid 是 34535 (後面會用到).
MariaDB [zabbix]> SELECT itemid FROM items WHERE name LIKE 'CPU utilization' AND hostid=10385; +--------+ | itemid | +--------+ | 34535 | +--------+ 1 row in set (0.001 sec)
現在已經知道 CentOS8-1 的 CPU utilization itemid 是 34535 ,接下來到 history 資料表查詢這個 CPU utilization 指定區間的數值各是多少.
MariaDB [zabbix]> SELECT FROM_UNIXTIME( clock , '%Y-%m-%d %H:%i:%s' ) , value FROM history WHERE itemid=34535 AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 10 MINUTE)) AND UNIX_TIMESTAMP(NOW()) ; +----------------------------------------------+--------------------+ | FROM_UNIXTIME( clock , '%Y-%m-%d %H:%i:%s' ) | value | +----------------------------------------------+--------------------+ | 2021-06-17 23:10:11 | 0.6837890000000044 | | 2021-06-17 23:11:11 | 0.558612999999994 | | 2021-06-17 23:12:11 | 0.6337560000000053 | | 2021-06-17 23:13:11 | 0.6002500000000026 | | 2021-06-17 23:14:11 | 0.6589919999999978 | | 2021-06-17 23:15:11 | 0.6003000000000043 | | 2021-06-17 23:16:11 | 0.600449999999995 | | 2021-06-17 23:17:11 | 0.5918640000000011 | | 2021-06-17 23:18:11 | 0.6587179999999933 | | 2021-06-17 23:19:11 | 0.5752880000000005 | +----------------------------------------------+--------------------+ 10 rows in set (0.001 sec)
裡面用到很多與時間相關的函數.
- UNIX_TIMESTAMP
回傳從 1970-01-0100:00:00 到指定的時間的秒數(無符號整數).MariaDB [testdb]> SELECT UNIX_TIMESTAMP(NOW()); +-----------------------+ | UNIX_TIMESTAMP(NOW()) | +-----------------------+ | 1587031910 | +-----------------------+ 1 row in set (0.000 sec)
- FROM_UNIXTIME
UNIX_TIMESTAMP 是把時間從 1970-01-0100:00:00 到指定時間的秒數,相反的函數是 FROM_UNIXTIME 可以把 1970-01-0100:00:00 到指定時間的秒數轉成時間格式.MariaDB [(none)]> SELECT FROM_UNIXTIME( 1587031910, '%Y-%m-%d %H:%i:%s' ); +--------------------------------------------------+ | FROM_UNIXTIME( 1587031910, '%Y-%m-%d %H:%i:%s' ) | +--------------------------------------------------+ | 2020-04-16 18:11:50 | +--------------------------------------------------+ 1 row in set (0.000 sec)
參數 : 更多格式請參考 – https://mariadb.com/kb/en/date_format/
- %Y – Year with 4 digits.
- %m – Month with 2 digits.
- %d – Day with 2 digits.
- %H – Hour with 2 digits between 00-23.
- %i – Minute with 2 digits.
- %s – Seconds with 2 digits.
- DATE_SUB
將減去 DATE_SUB 指定的時間.INTERVAL 後面可以接的時間為 YEAR , QUARTER , MONTH , WEEK , DAY , HOUR , MINUTE , SECOND , MICROSECOND . 更多格式請參考 https://mariadb.com/kb/en/addtime/MariaDB [(none)]> SELECT DATE_SUB(CURRENT_TIMESTAMP() , INTERVAL 2 YEAR); -------------------------------------------------+ | DATE_SUB(CURRENT_TIMESTAMP() , INTERVAL 2 YEAR) | +-------------------------------------------------+ | 2017-09-06 17:22:36 | +-------------------------------------------------+ 1 row in set (0.01 sec)
- NOW
NOW 回傳目前系統的日期時間.MariaDB [(none)]> SELECT NOW(); +---------------------+ | CURRENT_TIMESTAMP() | +---------------------+ | 2019-09-06 17:16:18 | +---------------------+ 1 row in set (0.00 sec)
執行結果會顯示已經換好的時間與 CPU utilization 的數值(可以看出資料是每一分鐘讀取一次).