• 當前位置:首頁 > IT技術 > 數據庫 > 正文

    實踐案例:Zabbix利用自定義腳本監控MySQL
    2022-05-31 17:10:54

    1. Zabbix監控MySQL的規劃

    ? ? ? ?在用Zabbix6.0.4做監控,創建監控項之前要盡量規劃好要監控什么、如何監控、監控數據如何存放、監控數據如何展現、異常情況報警、報警處置等。 本次實踐采用自行編寫的MySQL監控腳本( /etc/zabbix/zabbix_agentd.d/check_mysql.sh )來實現Zabbix對MySQL的監控。


    2. 準備MySQL主機

    在IP:192.168.250.48 服務器上通過自定義yum源方式,安裝MySQL8.0。

    #################################################################################
    #### MySQL主機上也要先安裝 zabbix-agent
    [root@CentOS84-IP48 ]#rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
    [root@CentOS84-IP48 ]#dnf clean all
    [root@CentOS84-IP48 ]#dnf -y install zabbix-agent
    [root@CentOS84-IP48 ]#systemctl enable --now zabbix-agent

    #################################################################################
    #### 安裝mysql80的yum源,并安裝啟動MYSQL
    [root@CentOS84-IP48 ]#wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
    [root@CentOS84-IP48 ]#rpm -ivh mysql80-community-release-el8-1.noarch.rpm
    [root@CentOS84-IP48 ]#dnf install -y mysql-server

    [root@CentOS84-IP48 ]#systemctl enable --now mysqld.service
    [root@CentOS84-IP48 ]#ss -tln
    State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
    LISTEN 0 70 *:33060 *:*
    LISTEN 0 151 *:3306 *:*
    [root@CentOS84-IP48 ]#

    ## 數據庫安全初始化
    [root@CentOS84-IP48 ]#find / -name mysql_secure_installation
    /usr/bin/mysql_secure_installation
    [root@CentOS84-IP48 ]#mysql_secure_installation

    #################################################################################
    #### 授權mysql用戶zabbix可以登錄并查詢 (在zabbix的agent客戶端將要查詢需要的監控數據)
    ## 利用前面設定的root密碼登錄到mysql
    [root@CentOS84-IP48 ]#mysql -uroot -pshone2022
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 11
    Server version: 8.0.26 Source distribution

    Copyright (c) 2000, 2021, Oracle and/or its affiliates.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sys |
    +--------------------+
    4 rows in set (0.01 sec)

    mysql>

    mysql> show master logs;
    +---------------+-----------+-----------+
    | Log_name | File_size | Encrypted |
    +---------------+-----------+-----------+
    | binlog.000001 | 446 | No |
    +---------------+-----------+-----------+
    1 row in set (0.00 sec)

    mysql>


    mysql> select user,host from mysql.user;
    +------------------+-----------+
    | user | host |
    +------------------+-----------+
    | mysql.infoschema | localhost |
    | mysql.session | localhost |
    | mysql.sys | localhost |
    | root | localhost |
    +------------------+-----------+
    4 rows in set (0.01 sec)

    ## 不支持一次性完成創建和授權操作
    mysql> grant all on *.* to zabbix@localhost identified by 'shone2022';
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'shone2022'' at line 1

    ##
    mysql> select user,host from mysql.user;
    +------------------+-----------+
    | user | host |
    +------------------+-----------+
    | mysql.infoschema | localhost |
    | mysql.session | localhost |
    | mysql.sys | localhost |
    | root | localhost |
    +------------------+-----------+
    4 rows in set (0.00 sec)

    mysql> create user zabbix@"%" identified by 'shone2022';
    Query OK, 0 rows affected (0.02 sec)

    mysql> select user,host from mysql.user;
    +------------------+-----------+
    | user | host |
    +------------------+-----------+
    | zabbix | % |
    | mysql.infoschema | localhost |
    | mysql.session | localhost |
    | mysql.sys | localhost |
    | root | localhost |
    +------------------+-----------+
    5 rows in set (0.00 sec)

    ## 授權zabbix用戶可以獲取數據
    mysql> grant all privileges on *.* to zabbix@"%";
    Query OK, 0 rows affected (0.01 sec)

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    3. 自定義監控命令和監控腳本

    ? ? ? 本部分將詳細介紹如何編寫和測試監控命令、腳本,并驗證運行效果。 自定義腳本監控擴展Agent的思路:Zabbix Server與Agent之間監控數據的采集主要是通過Zabbix Server主動向Agent詢問某個Key的值,Agent會根據Key去調用相應的函數(或者命令等)去獲取這個值并返回給Server端。Zabbix的Agent本并沒有內置MySQL的監控功能(但是Server端提供了相應的Template配置),所以我們需要使用Zabbix的User Parameters功能,為MySQL添加監控腳本。


    3.1 編寫監控MySQL的版本和存活狀態的命令行

    #### zabbix agent端
    #################################################################################
    #### mysql存活檢測
    ## 利用UserParameter參數自定義Agent Key來完成。采用mysqladmin這個工具來實現,下面是整個編寫、校驗的全流程記錄,對于要自己動手編寫監控項腳本和命令具有指導意義。
    [root@CentOS84-IP48 ]#mysqladmin -h 127.0.0.1 -u zabbix -pshone2022 ping
    mysqladmin: [Warning] Using a password on the command line interface can be insecure.
    mysqld is alive

    ## 如果MySQL狀態正常,會顯示mysqld is alive,否則會提示連不上。對于服務器端,mysqld is alive表述,計算機程序語言不好處理的,服務器端最好接收1和0,1表示服務可用,0表示服務不可用。改進一下這個命令,如下:
    [root@CentOS84-IP48 ]#mysqladmin -h 127.0.0.1 -u zabbix -pshone2022 ping | grep -c alive
    mysqladmin: [Warning] Using a password on the command line interface can be insecure.
    1
    [root@CentOS84-IP48 ]#

    ## 從上面的輸出結果看,有mysqladmin: [Warning]信息,需要處置掉,基本方法就是將密碼寫在文件中
    ## 用戶名和密碼放在命令中對于以后的維護不好,所以我們在 /etc/zabbix/ 下創建一個包含MySQL用戶名和密碼的配置文件“ .my.cnf ”,如下:

    [root@CentOS84-IP48 ]#find / -name zabbix
    /run/zabbix
    /etc/zabbix
    /var/lib/selinux/targeted/active/modules/100/zabbix
    /var/lib/selinux/targeted/tmp/modules/100/zabbix
    /var/log/zabbix
    /usr/share/selinux/targeted/default/active/modules/100/zabbix
    [root@CentOS84-IP48 ]#
    [root@CentOS84-IP48 ]#ll /usr/bin/mysqladmin
    -rwxr-xr-x 1 root root 7147544 Sep 2 2021 /usr/bin/mysqladmin
    [root@CentOS84-IP48 ]#ll /etc/zabbix
    total 20
    -rw-r--r-- 1 root root 16451 May 3 15:30 zabbix_agentd.conf
    drwxr-xr-x 2 root root 6 May 3 15:30 zabbix_agentd.d


    ## .my.cnf 文件格式內容
    [root@CentOS84-IP48 ]#vim /etc/zabbix/.my.cnf
    [client]
    user=zabbix
    host=127.0.0.1
    password=shone2022

    ## 這個文件是隱藏文件,需要家 -a 才能看到,同時注意必須注意寫法 [client] 字段必須有,否則執行命令時候報錯。

    [root@CentOS84-IP48 ]#ll -a /etc/zabbix/
    total 36
    drwxr-xr-x 3 root root 70 May 25 20:04 .
    drwxr-xr-x. 144 root root 8192 May 25 19:19 ..
    -rw-r--r-- 1 root root 55 May 25 20:01 .my.cnf
    -rw-r--r-- 1 root root 16451 May 3 15:30 zabbix_agentd.conf
    drwxr-xr-x 2 root root 6 May 3 15:30 zabbix_agentd.d
    [root@CentOS84-IP48 ]#cat /etc/zabbix/.my.cnf
    [client]
    user=zabbix
    host=127.0.0.1
    password=shone2022
    [root@CentOS84-IP48 ]#

    ## 有了密碼文件后的命令進化為下面的格式
    [root@CentOS84-IP48 ]#HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
    1

    ## 完成這步后需要做的就是將這個監控命令添加到Zabbix Agent中,并與一個Key對應,這樣Zabbox Server就能通過這個Key獲取MySQL的狀態了。用mysql.ping作為MySQL狀態的Key。將下面的命令行可以直接寫在agent的配置文件中。

    UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive

    3.2 編寫監控MySQL的性能腳本

    ? ? ? ?自行編寫的腳本去監控MySQL的靈活性更強,可以獲取自己想要的數據和狀態。更適合去監控MySQL主從、主主、讀寫分離模式下的生產環境下的MySQL服務器。

    #### 性能腳本
    [root@CentOS84-IP48 ]#vim /etc/zabbix/zabbix_agentd.d/check_mysql.sh
    [root@CentOS84-IP48 ]#cat /etc/zabbix/zabbix_agentd.d/check_mysql.sh
    #!/bin/bash
    # -------------------------------------------------------------------------------
    # FileName: check_mysql.sh
    # -------------------------------------------------------------------------------

    # 用戶名
    MYSQL_USER='zabbix'

    # 密碼
    MYSQL_PWD='shone2022'

    # 主機地址/IP 下面這個寫法是agent 和 數據庫在同臺機器上
    MYSQL_HOST='127.0.0.1'

    # 端口
    MYSQL_PORT='3306'

    # 數據連接
    MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"

    # 參數是否正確
    if [ $# -ne "1" ];then
    echo "arg error!"
    fi

    # 獲取數據
    case $1 in
    Uptime)
    result=`${MYSQL_CONN} status 2>/dev/null |cut -f2 -d":"|cut -f1 -d"T"`
    echo $result
    ;;
    Com_update)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_update"|cut -d"|" -f3`
    echo $result
    ;;
    Slow_queries)
    result=`${MYSQL_CONN} status 2>/dev/null |cut -f5 -d":"|cut -f1 -d"O"`
    echo $result
    ;;
    Com_select)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_select"|cut -d"|" -f3`
    echo $result
    ;;
    Com_rollback)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_rollback"|cut -d"|" -f3`
    echo $result
    ;;
    Questions)
    result=`${MYSQL_CONN} status 2>/dev/null |cut -f4 -d":"|cut -f1 -d"S"`
    echo $result
    ;;
    Com_insert)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_insert"|cut -d"|" -f3`
    echo $result
    ;;
    Com_delete)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_delete"|cut -d"|" -f3`
    echo $result
    ;;
    Com_commit)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_commit"|cut -d"|" -f3`
    echo $result
    ;;
    Bytes_sent)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_sent" |cut -d"|" -f3`
    echo $result
    ;;
    Bytes_received)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_received" |cut -d"|" -f3`
    echo $result
    ;;
    Com_begin)
    result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_begin"|cut -d"|" -f3`
    echo $result
    ;;

    *)
    echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
    ;;
    esac

    ## 腳本運行授權和權屬修改
    [root@CentOS84-IP48 ]#chmod a+x /etc/zabbix/zabbix_agentd.d/check_mysql.sh
    [root@CentOS84-IP48 ]#chown zabbix.zabbix /etc/zabbix/zabbix_agentd.d/check_mysql.sh
    [root@CentOS84-IP48 ]#

    4. Zabbix Agent添加自定義監控項

    #### 前面已經安裝好zabbix_agent,修改并配置好zabbix_agent
    [root@CentOS84-IP48 ]#vim /etc/zabbix/zabbix_agentd.conf
    ...................
    ## mysql版本
    UserParameter=mysql.version,mysql -V
    ## 監控MySQL的存活狀態,當狀態發生異常,發出報警;
    UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
    # #監控mysql性能的腳本
    UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
    ....................

    [root@CentOS84-IP48 ]#grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
    PidFile=/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=192.168.250.18
    ListenPort=10050
    ServerActive=127.0.0.1
    Hostname=192.168.250.48
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    UserParameter=mysql.version,mysql -V
    UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
    UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
    [root@CentOS84-IP48 ]#
    [root@CentOS84-IP48 ]#systemctl restart zabbix-agent

    #### zabbix_agent上測試 本機命令及腳本編寫的監控項的實際效果
    [root@CentOS84-IP48 ]#/usr/sbin/zabbix_agentd -t mysql.ping
    mysql.ping [t|1]
    [root@CentOS84-IP48 ]#/usr/sbin/zabbix_agentd -t mysql.version
    mysql.version [t|mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)]
    [root@CentOS84-IP48 ]#/usr/sbin/zabbix_agentd -t mysql.status[Uptime]
    mysql.status[Uptime] [t|9921]
    [root@CentOS84-IP48 ]#/usr/sbin/zabbix_agentd -t mysql.status[Com_update]
    mysql.status[Com_update] [t|0]
    [root@CentOS84-IP48 ]#

    5. Zabbix Server命令行測試監控項數據

    #### Zabbix_server測試聯通情況等
    [root@CentOS84-IP18 ]#/usr/bin/zabbix_get -s 192.168.250.48 -p 10050 -k mysql.status[Uptime]
    10190
    [root@CentOS84-IP18 ]#/usr/bin/zabbix_get -s 192.168.250.48 -p 10050 -k mysql.status[Com_update]
    0
    [root@CentOS84-IP18 ]#/usr/bin/zabbix_get -s 192.168.250.48 -p 10050 -k mysql.ping
    1
    [root@CentOS84-IP18 ]#/usr/bin/zabbix_get -s 192.168.250.48 -p 10050 -k mysql.version
    mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
    [root@CentOS84-IP18 ]#

    6. 創建監控模板

    創建模板,并自定義監控項、觸發器、圖形及儀表盤 配置 --- 模板 --- 創建模板

    6.1 自定義模板

    實踐案例:Zabbix利用自定義腳本監控MySQL_centos


    實踐案例:Zabbix利用自定義腳本監控MySQL_MySQL監控腳本_02


    6.2 自定義監控項

    實踐案例:Zabbix利用自定義腳本監控MySQL_MySQL監控腳本_03


    6.3 自定義監控圖形

    實踐案例:Zabbix利用自定義腳本監控MySQL_Zaabix監控MYSQL_04


    7. 創建主機并關聯自定義MySQL監控模板

    創建主機并關聯自定義模板?MySQL-shone

    配置 --- 主機 --- 創建主機


    實踐案例:Zabbix利用自定義腳本監控MySQL_Zaabix監控MYSQL_05


    8. 驗證監控項數據


    實踐案例:Zabbix利用自定義腳本監控MySQL_mysql_06


    實踐案例:Zabbix利用自定義腳本監控MySQL_Zaabix監控MYSQL_07


    本文摘自 :https://blog.51cto.com/s

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码