Linux – Zabbix Database

測試環境為 CentOS 8 x86_64 虛擬機,資料庫為 MariaDB.

透過 Zabbix 的網頁就可以看到目前監控的 Agent 有哪些系統資訊可以查詢,除了透過 Zabbix 的網頁外,有辦法取得這些資料 (RAW Data) 嗎? 可以直接存取資料庫 (下面介紹) 或是透過 API 的方式.

關於安裝 Zabbix Server, Frontend, Agent 請參考以下連結.

首先我們要來看有哪些資料可以查詢的, 在 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 的數值(可以看出資料是每一分鐘讀取一次).

沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料