linux監控詳細說明配置----zabbix(4.0)

一、監控的要點:

1、概述

從入門到精通

  1. 識別監控對象
  2. 理解監控對象
  3. 細分監控對象的指標
  4. 確定報警的基準線

預中級

  1. 工具化和監控分離
  2. 監控對象的分類:
    2.1 硬件監控(方法:機房巡檢、IPMI、SNMP)
    2.2 系統監控(對象:cpu,內存、IO)
    2.3 服務監控(對象:各類服務【NGINX、Tomcat、rabbitmq、OpenStack、mysql】)
    2.4 日誌監控(方法:elk)
    2.5 網絡監控(發放:第三方Smokeping)
    2.6 APM應用性能管理 (工具pinpoint)
    2.7 流量監控(工具Piwik、xx統計)
  3. 掌握一個監控工具 zabbix

中級

  1. 標準化監控 (標準化的腳本、監控模板)
  2. 分佈式監控(主動、被動、分佈式)
  3. 自動化監控(自動發現,主動註冊(agent主動註冊、server主動添加(API)))
  4. 性能優化(數據採集、數據存儲、數據查詢)
  5. 二次開發(定製報表、API調用)

進階

  1. 動態告警
  2. 智能告警:1.告警去重 2.依賴
  3. 故障自愈(事件驅動、主動控制)
  4. 大規模

2、硬件監控

  1. 機房巡檢

  2. 通過網絡來巡檢

ipmi

yum -y install OpenIPMI ipmitool

具體參考:https://www.ibm.com/developerworks/cn/linux/l-ipmi/

SNMP

具體參考:https://blog.csdn.net/HandsomeHong/article/details/80016249

安裝snmp

yum -y install net-snmp net-snmp-libs net-snmp-utils

修改配置

[root@k8s-m1 ~]# grep '^[a-z]' /etc/snmp/snmpd.conf
com2sec admin  default       admin
group   admin v2c           admin
view admin included .1 80
access  admin ""      any       noauth    exact  admin admin none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

啓動服務

systemctl start snmpd
netstat -lntpu |grep 161
udp        0      0 0.0.0.0:161             0.0.0.0:*                           17023/snmpd    

獲取cpu內存

[root@k8s-m1 ~]# snmpwalk  -v2c -c admin 10.201.1.145 .1.3.6.1.4.1.2021.10.1.3
UCD-SNMP-MIB::laLoad.1 = STRING: 0.01
UCD-SNMP-MIB::laLoad.2 = STRING: 0.04
UCD-SNMP-MIB::laLoad.3 = STRING: 0.05
[root@k8s-m1 ~]# snmpget  -v2c -c admin 10.201.1.145 .1.3.6.1.4.1.2021.10.1.3.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.01
[root@k8s-m1 ~]# snmpget  -v2c -c admin 10.201.1.145 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 3880792 KBytes

OID參考文章:https://blog.csdn.net/buster2014/article/details/46925633

3、系統監控

  1. CPU

參考文章:https://www.cnblogs.com/anyux/p/8195541.html
進程:每個進程至少有一個線程,每個進程可以有多個線程。
負載:單位時間內運行隊列中就緒等待的進程平均值

  • 常用監控CPU的指令

top

top - 14:44:13 up 5 days, 20:50,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 107 total,   2 running, 105 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3880792 total,   778556 free,   164584 used,  2937652 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3125052 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                     
                                        虛擬     物理    共享                                  佔用cpu總時間

lscpu

[root@k8s-m1 ~]# lscpu 

cat /proc/loadavg

cat /proc/loadavg 
0.00 0.01 0.05 1/134 17383

sysstat包帶的監控

yum -y install sysstat
vmstat 1 10
mpstat 1 10
  1. 內存

虛擬內存、SWAP、物理內存

vmstat

vmstat 1 10

free

free -m

3.io

iotop

yum -y install iotop
iotop

測試io參考:https://elf8848.iteye.com/blog/2089055

網絡io

iftop

[root@localhost ~]# iftop
[root@localhost ~]# iftop -i eth0 -F 10.201.1.32/24

nethogs

yum -y install nethogs
nethogs

二、安裝zabbix

1、安裝環境

  • 操作系統:CentOS Linux release 7.6.1810 (Core)
  • zabbix版本:4.0
  • 主機:
IP地址 服務類型
10.201.1.145 server
10.201.1.146 agent

2、安裝server端

  • 添加 Zabbix 軟件倉庫
rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum-config-manager --enable rhel-7-server-optional-rpms
  • 安裝 Server、前端
yum install zabbix-server-mysql
yum install zabbix-web-mysql
  • 安裝數據庫,並初始化
yum -y install mariadb-server
systemctl enable mariadb.service
systemctl start  mariadb.service
mysql_secure_installation

創建zabbix庫和授權

mysql -uroot -p<password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';

導入數據

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
  • 修改配置文件

修改httpd配置

ServerName 127.0.0.1:80 #95行取消註釋

修改Zabbix server配置文件

vi /etc/zabbix/zabbix_server.conf
DBPassword=123456 #124行修改zabbix的密碼
  • 啓動服務
systemctl start httpd.service 
systemctl enable  httpd.service 
systemctl start zabbix-server.service 
systemctl enable  zabbix-server.service
netstat -antpu |grep 10051
  • 瀏覽器訪問:10.201.1.145/zabbix

根據提示完成安裝

提示需要修改時區

vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai #20行修改

linux監控詳細說明配置----zabbix(4.0)

用戶名: Admin
密碼:zabbix

3、安裝agent端

  • yum安裝
yum install zabbix-agent
  • 修改配置
[root@k8s-n1 yum.repos.d]# grep '^[A-Z]' /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.201.1.145  #指定server端
ServerActive=10.201.1.145  #指定server端
Include=/etc/zabbix/zabbix_agentd.d/*.conf
  • 啓動服務
systemctl start zabbix-agent
systemctl enable  zabbix-agent
netstat -antpu |grep 10050

三、配置zabbix監控

1、添加主機、選擇自帶模板

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 選擇模板,當前用自帶模板監控

linux監控詳細說明配置----zabbix(4.0)

  • 查看監控數據

linux監控詳細說明配置----zabbix(4.0)

2、監控nginx80端口、使用自帶模板,自定義監控項

  • 創建監控項

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

3、創建觸發器並設置郵件報警

  • 創建觸發器

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 創建動作,觸發器被觸發後執行的動作

linux監控詳細說明配置----zabbix(4.0)

  • 創建發件郵箱

linux監控詳細說明配置----zabbix(4.0)

  • 設置收件人的郵箱

linux監控詳細說明配置----zabbix(4.0)

設置完成後可以測試報警是否生效,關掉80端口

4、監控web使用自帶模板監控

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

5、監控mysql使用自帶模板

zabbix提供了自帶的mysql監控模板,但是又很多缺陷,需要修改後,才能更好的使用
修改後需要設置變量,更加靈活的監控多實例的mysql服務

  • 修改agent配置文件
[root@k8s-n1 zabbix_agentd.d]# grep '^[A-Z]' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$3';" | HOME=/var/lib/zabbix mysql -u$1 -p$2 -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
UserParameter=mysql.ping[*],HOME=/var/lib/zabbix mysqladmin -u$1 -p$2 ping | grep -c alive
UserParameter=mysql.version,mysql -V
  • 重啓agent服務
systemctl restart zabbix-agent
  • 添加環境變量,選擇mysql監控模板

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 查看監控到的數據

linux監控詳細說明配置----zabbix(4.0)

6、監控Nginx、TCP、Redis、Memcached使用自定義監控模板

  • 將下面腳本放入agent中/etc/zabbix/zabbix_linux_plugin.sh 中
[root@k8s-n1 zabbix]# cat zabbix_linux_plugin.sh 
#!/bin/bash
tcp_status_fun(){
    TCP_STAT=$1
    #netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,state[key]}' > /tmp/netstat.tmp
    ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/netstat.tmp
    TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/netstat.tmp | cut -d ' ' -f2)
    if [ -z $TCP_STAT_VALUE ];then
        TCP_STAT_VALUE=0
    fi
    echo $TCP_STAT_VALUE
}

nginx_status_fun(){
    NGINX_PORT=$1
    NGINX_COMMAND=$2
    nginx_active(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
    nginx_reading(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
       }
    nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
       }
    nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
       }
    nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
       }
    nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
       }
    nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
    case $NGINX_COMMAND in
        active)
            nginx_active;
            ;;
        reading)
            nginx_reading;
            ;;
        writing)
            nginx_writing;
            ;;
        waiting)
            nginx_waiting;
            ;;
        accepts)
            nginx_accepts;
            ;;
        handled)
            nginx_handled;
            ;;
        requests)
            nginx_requests;
        esac 
}

memcached_status_fun(){
    M_PORT=$1
    M_COMMAND=$2
    echo -e "stats\nquit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND " | awk '{print $3}'
}

redis_status_fun(){
    R_PORT=$1
    R_COMMAND=$2
    (echo -en "INFO \r\n";sleep 1;) | nc 10.201.1.146  "$R_PORT" > /tmp/redis_"$R_PORT".tmp
    REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
    echo $REDIS_STAT_VALUE  
}

main(){
    case $1 in
        tcp_status)
            tcp_status_fun $2;
            ;;
        nginx_status)
            nginx_status_fun $2 $3;
            ;;
        memcached_status)
            memcached_status_fun $2 $3;
            ;;
        redis_status)
            redis_status_fun $2 $3;
            ;;
        *)
            echo $"Usage: $0 {tcp_status key|memcached_status key|redis_status key|nginx_status key}"
    esac
}

main $1 $2 $3
  • 把下面的自定義配置文件放到/etc/zabbix/zabbix_agentd.d
[root@k8s-n1 zabbix_agentd.d]# cat zabbix-linux-plugin.conf 
UserParameter=linux_status[*],/etc/zabbix/zabbix_linux_plugin.sh "$1" "$2" "$3"
  • 重啓agent
systemctl restart zabbix-agent
  • 到zabbix頁面導入監控模板,我這裏給出了xml文件,自行下載.xml導入

百度網盤:https://pan.baidu.com/s/1rYyIdmE6MBKKDNGWzdUj6Q
密碼:aaf0

  • 監控nginx時 需要修改nginx的配置文件,才能獲取到值
[root@linux-node2 ~]# vim /etc/nginx/conf.d/nginx-status.conf
server {
       server_name 127.0.0.1;
       location /nginx_status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                deny all;
                }
}

7、監控jvm-Tomcat使用自帶模板

  1. server端的安裝配置
  • 需要安裝個zabbix-java-gateway
yum -y install zabbix-java-gateway.x86_64 
  • 修改兩個配置文件
[root@k8s-m1 ~]# grep '^[A-Z]' /etc/zabbix/zabbix_java_gateway.conf 
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
vim  /etc/zabbix/zabbix_server.conf
JavaGateway=10.201.1.145 #取消註釋修改
JavaGatewayPort=10052  #取消註釋修改
StartJavaPollers=5  #取消註釋修改
  • 啓動服務
systemctl restart zabbix-server.service
systemctl start zabbix-java-gateway
  1. agent端的配置
  • 修改Tomcat的配置文件,打開jvm接口
vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1234  #配置端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=10.201.1.146" #指定本機IP地址
  • 重啓Tomcat
 /usr/local/tomcat/bin/shutdown.sh 
 /usr/local/tomcat/bin/startup.sh
  • 在本機驗證監控是否可以獲取到值,需要先下載一個java包
wget  http://repo.typesafe.com/typesafe/repo/cmdline-jmxclient/cmdline-jmxclient/0.10.3/cmdline-jmxclient-0.10.3.jar

驗證

[root@k8s-n1 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 10.201.1.146:1234 java.lang:type=Memory 
Attributes:
 ObjectPendingFinalizationCount: ObjectPendingFinalizationCount (type=int)
 HeapMemoryUsage: HeapMemoryUsage (type=javax.management.openmbean.CompositeData)
 NonHeapMemoryUsage: NonHeapMemoryUsage (type=javax.management.openmbean.CompositeData)
 Verbose: Verbose (type=boolean)
 ObjectName: ObjectName (type=javax.management.ObjectName)
Operations:
 gc: gc
  Parameters 0, return type=void
[root@k8s-n1 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 10.201.1.146:1234 java.lang:type=Memory  NonHeapMemoryUsage
03/26/2019 09:15:36 +0800 org.archive.jmx.Client NonHeapMemoryUsage: 
committed: 38191104
init: 2555904
max: -1
used: 36701248

可以看到已經獲取到值了

  1. 在zabbix的web界面配置監控主機設置模板
  • 創建主機,用jvm的方式連接 ,指定模板

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 查看監控項有很多不支持,需要根據Tomcat版本來修改主機的變量

linux監控詳細說明配置----zabbix(4.0)

  • 如何修改,需要藉助win的java管理臺來確定

win7 32 位java下載地址

百度網盤:https://pan.baidu.com/s/1rYyIdmE6MBKKDNGWzdUj6Q
密碼:aaf0
  • 安裝配置完成後如圖所示:

打開jconsole,就可以彈出java的管理界面了
linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

8、監控win系統

  1. 下載源碼安裝包,4.0的源碼目前不知道如何安裝,暫時用的舊版本3.0的源碼包
https://newcontinuum.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.0.25/zabbix-3.0.25.tar.gz
  1. 解壓源碼包

將裏面的bin對應系統版本的文件全部複製出來,在到conf中複製一個win的配置文件

linux監控詳細說明配置----zabbix(4.0)

  1. 修改配置文件zabbix_agentd.win.conf
LogFile=c:\zabbix\zabbix_agentd.log  #指定log存放路徑
Server=10.201.1.145 #指定server端ip
ServerActive=10.201.1.145 #主動模式
Hostname=192.168.16.18 #指定本機主機名
  1. 安裝agent,和啓動服務

cmd命令安裝

C:\zabbix>zabbix_agentd.exe -c zabbix_agentd.win.conf -i

啓動

C:\zabbix>zabbix_agentd.exe -c zabbix_agentd.win.conf -s
C:\zabbix>netstat -an
  1. 啓用SNMP服務,並配置

  2. 添加防火牆入站規則tcp10050和udp161

linux監控詳細說明配置----zabbix(4.0)

  1. zabbix界面添加win主機,並使用模板監控

兩種方式IP和SNMP

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

9、監控mysql,使用第三方插件percona

使用這個插件可以監控到mysql很多詳細參數大概200多個監控項

  1. agent端安裝
yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-3.noarch.rpm
yum install percona-zabbix-templates php php-mysql -y 
rpm -ql  percona-zabbix-templates
  1. 複製模板
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
  1. 修改percona兩個配置文件
[root@k8s-m1 ~]# cat /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
#!/bin/sh
# The wrapper for Cacti PHP script.
# It runs the script every 5 min. and parses the cache file on each following run.
# Version: 1.1.8
#
# This program is part of Percona Monitoring Plugins
# License: GPL License (see COPYING)
# Copyright: 2018 Percona
# Authors: Roman Vynar

ITEM=$1
HOST=localhost
DIR=`dirname $0`
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"

if [ "$ITEM" = "running-slave" ]; then
    # Check for running slave
    RES=`HOME=~zabbix mysql -uzabbix -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` #只用修改這行,添加-u -p參數就行。指定用戶和密碼
    if [ "$RES" = " Yes, Yes," ]; then
        echo 1
    else
        echo 0
    fi
    exit
elif [ -e $CACHEFILE ]; then
    # Check and run the script
    TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
    TIMENOW=`date +%s`
    if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then
        rm -f $CACHEFILE
        $CMD 2>&1 > /dev/null
    fi
else
    $CMD 2>&1 > /dev/null
fi

# Parse cache file
if [ -e $CACHEFILE ]; then
    cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
else
    echo "ERROR: run the command manually to investigate the problem: $CMD"
fi
vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php 
$mysql_user = 'zabbix'; #修改30行
$mysql_pass = '123456'; #修改31行
  1. 去zabbix管理界面添加模板

percona提供的xml模板是根據2.0寫的,不適用4.0版本需要修改,我已經修改好了,下載地址:

百度網盤:https://pan.baidu.com/s/1rYyIdmE6MBKKDNGWzdUj6Q
密碼:aaf0

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  1. 連接模板採集數據,查看效果

linux監控詳細說明配置----zabbix(4.0)

10、監控php-fpm

  1. 配置php-fpm

打開php-fpm的pool配置文件,刪除pm.status=指令的註釋:

pm.status_path = /php-fpm_status
  1. 配置nginx

把如下配置添加到nginx配置文件:

server {
    listen 10061;

    location /php-fpm_status {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

重啓php-fpm和nginx後,嘗試執行如下命令測試:

curl http://127.0.0.1:10061/php-fpm_status
  1. zabbix客戶端配置

增加自定義key

cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/php-fpm_status.conf 
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1:10061/php-fpm_status?xml" | grep "<$1>" | awk -F'>|<' '{print $$3}'

重啓zabbix客戶端

  1. 導入php-fpm模板
百度網盤:https://pan.baidu.com/s/1rYyIdmE6MBKKDNGWzdUj6Q
密碼:aaf0

11、監控MongoDB性能【OK】

https://www.cnblogs.com/hy007x/p/7736403.html

12、監控LVS

https://github.com/mjwtc0722/zabbix-lvs-status

13、Zabbix監控指定端口

https://blog.51cto.com/3241766/2117521

四、zabbix進階

1、主動模式

被動模式:此模式爲zabbix默認的工作模式,由zabbix server 向zabbix agent 發出指令獲取數據,zabbix agent被動地去獲取數據並返回給zabbix server,zabbix server會週期性地向agent索取數據。此模式的最大問題就是會增加zabbix server的工作量,在大量的服務器環境下,zabbix server不能及時獲取到最新的數據。

主動模式:即由zabbix agent 主動採集數據並返回給zabbix server,不需要zabbix server 的另行干預,因此使用主動模式能在一定程序上減輕zabbix server的壓力。

  1. 修改agent配置文件
[root@k8s-n1 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0 #不做日誌切分
StartAgents=0 #關閉被動模式
ServerActive=10.201.1.145 #指定server端IP地址
HostnameItem=system.hostname #server端一會需要填寫這個地方的主機名,默認是獲取本機主機名
Include=/etc/zabbix/zabbix_agentd.d/*.conf
  1. 重啓agent端
systemctl restart zabbix-agent
  1. 配置zabbix管理界面,修改模板,將被動改爲主動模式
  • 以Template OS Linux模板爲例子講解,將這個模板所有的監控項改爲主動模式

先完全克隆這個模板,重命名爲Template OS Linux active

linux監控詳細說明配置----zabbix(4.0)

批量更新items

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

將這個模板的連接的模板也改爲主動模式,方法同上

linux監控詳細說明配置----zabbix(4.0)

將自動發現,也改爲主動模式,並把裏面的items改爲主動

linux監控詳細說明配置----zabbix(4.0)

查看獲取到的數據

linux監控詳細說明配置----zabbix(4.0)

2、trapper方式監控

zabbix獲取數據時有時會出現超時,如果一些數據需要執行比較長的時間才能獲取的話,那麼zabbix會出現異常,考慮到這種情況,zabbix增加了Trapper功能,客戶端自己提交數據給zabbix。

trapper是被監控主機主動發送數據給zabbix server,與主動模式的區別是不需要安裝客戶端;trapper方式發送數據是以主機名處理,不是IP地址,所以主機名要唯一。

tapper工作模式中,使用zabbix監控類型zabbix trapper(可以稱爲zabbix捕捉器),在zabbix服務器上必須有一個捕捉項目,然後需要配合zabbix_sender把數據推送給zabbix服務器,該程序由zabbix發行版自帶

zabbix_sender是一個命令行工具,可以用來發送Zabbix服務器處理性能數據。該工具通常用於長時間運行的用戶腳本,用於定期發送可用性和性能數據。

  1. 安裝服務所需插件zabbix-sender
yum -y install zabbix-sender.x86_64
  1. zabbix_sender命令:
[root@k8s-n1 ~]# zabbix_sender 
usage: zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -T -i <file> -r} [-c <file>]
參數說明:
  -c --config <file>           配置文件絕對路徑    
  -z --zabbix-server <server>     zabbix server的IP地址    
  -p --port <server port>       zabbix server端口.默認10051    
  -s --host <hostname>         zabbix 管理界面指定的主機名
  -I --source-address <IP address> 源IP    
  -k --key <key>             監控項的key    
  -o --value <key value>        key值    
  -i --input-file <input file>   從文件裏面讀取hostname、key、value 一行爲一條數據,使用空格作爲分隔符,如果主機名帶空格,那麼請使用雙引號包起來    
  -T --with-timestamps         一行一條數據,空格作爲分隔符: <hostname> <key> <timestamp> <value>,配合 --input-file option,timestamp爲unix時間戳    
  -r --real-time            將數據實時提交給服務器    
  -v --verbose              詳細模式, -vv 更詳細
  1. 監控項配置:

創建主機

linux監控詳細說明配置----zabbix(4.0)

創建監控項

linux監控詳細說明配置----zabbix(4.0)

  1. 客戶端使用zabbix_sender發送數據
  • 單個值發送
[root@k8s-n1 ~]# zabbix_sender -z 10.201.1.145 -s trapper -k trapper-test  -o 133
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000113"
sent: 1; skipped: 0; total: 1

查看數據

linux監控詳細說明配置----zabbix(4.0)

  • zabbix_sender批量傳遞key值

通過zabbix_sender可以批量傳遞key值,可以創建一個文本,每行定義一個key值,可以使用不同的主機名以及key、key值。

創建一個文本

[root@k8s-n1 ~]# cat 1.txt 
trapper trapper-test 10
trapper trapper-test 12
trapper trapper-test 15
trapper trapper-test 17
trapper trapper-test 19
trapper trapper-test 13
trapper trapper-test 16
trapper trapper-test 10
[root@k8s-n1 ~]# zabbix_sender -z 10.201.1.145 -s trapper   -i 1.txt -vv
zabbix_sender [5007]: DEBUG: answer [{"response":"success","info":"processed: 8; failed: 0; total: 8; seconds spent: 0.000334"}]
info from server: "processed: 8; failed: 0; total: 8; seconds spent: 0.000334"
sent: 8; skipped: 0; total: 8

zabbix web端查看數據

linux監控詳細說明配置----zabbix(4.0)

3、自動化——網絡發現

假如有100臺服務器,不想一臺臺主機去添加,能不能讓zabbix自動添加主機呢?當然可以,網絡發現便是滿足這個需求的功能,當然前提條件是所有服務器都已經安裝了agent或者snmp(其實也可以不用,鑑於我們大部分功能都用agent,所以請安裝上agent),server端(由server端發起的)掃描配置好的ip段,自動添加host,自動給host link模板,自動加到主機組裏等等。網絡發現功能讓我們能更快速的部署zabbix、簡化zabbix管理、並且在經常變動的環境裏面也不需要花太多的精力。

  1. 修改配置文件
[root@k8s-n2 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.201.1.145
ServerActive=10.201.1.145
HostnameItem=system.hostname
HostMetadata=web
Include=/etc/zabbix/zabbix_agentd.d/*.conf
  1. zabbix界面操作
  • 打開自動發現,設置規則

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 配置自動發現動作

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  • 查看主機列表

linux監控詳細說明配置----zabbix(4.0)

  • 查看數據

4、自動化——自動註冊

自動註冊由客戶端主動發起,客戶端必須安裝並啓動Agentd,否則無法被自動註冊添加至主機列表。功能跟網絡發現一樣,但自動註冊的效率比網絡發現的高。
配置文件內容保持跟網絡一樣即可

1.刪除k8s-n2
2.停用網絡發現
3.添加自動註冊動作規則

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

  1. 查看主機列表

linux監控詳細說明配置----zabbix(4.0)

  1. 查看數據

linux監控詳細說明配置----zabbix(4.0)

5、低級自動發現之MySQL多實例

Zabbix的網絡發現是指zabbix server通過配置好的規則,自動添加host,group,template

Zabbix的主動註冊剛好和網絡發現是相反的,功能基本一致。zabbix agent主動聯繫zabbix server,server自動添加host,group,template

以上兩種方式都是發現host,添加host,而low-level discovery(低級自動發現)更加底層,用於發現item,trigger,graph等等

    1. 配置3307、3308的實例
[root@linux-node2 ~]# mkdir /data/{3307,3308} -p
[root@linux-node2 ~]# chown -R mysql.mysql /data
[root@linux-node2 ~]# cp /etc/my.cnf /etc/my3307.cnf
[root@linux-node2 ~]# vim /etc/my3307.cnf 
[mysqld]
datadir=/data/3307
socket=/data/3307/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
port=3307
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/data/3307/mariadb.log
pid-file=/data/3307/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@linux-node2 ~]# cp /etc/my3307.cnf /etc/my3308.cnf
[root@linux-node2 ~]# vim /etc/my3308.cnf 
[mysqld]
datadir=/data/3308
socket=/data/3308/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
port=3308
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/data/3308/mariadb.log
pid-file=/data/3308/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
    1. 初始化數據庫
[root@linux-node2 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf 
[root@linux-node2 ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
[root@linux-node2 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf 
[root@linux-node2 ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &
[root@linux-node2 ~]# netstat -tulnp |grep mysql|awk -F "[ :]+" '{print $4}'
3307
3308
3306
    1. 編寫獲取端口號的shell腳本
vim discovery_mysql.sh 
#!/bin/bash
#mysql low-level discovery
res=`sudo netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$4}'`
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
sh discovery_mysql.sh |python -m json.tool    #採用json格式顯示
 {
    "data": [
        {
            "{#MYSQLPORT}": "3307"
        },
        {
            "{#MYSQLPORT}": "3308"
        },
        {
            "{#MYSQLPORT}": "3306"
        }
    ]
}
    1. 編輯自定義key
[root@linux-node2 zabbix_agentd.d]# vim discovery_mysql.conf
UserParameter=discovery_mysql,/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/discovery_mysql.sh
[root@linux-node1 ~]# zabbix_get -s linux-node2 -k discovery_mysql    #測試server端獲取數據
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}
#這裏報錯是因爲netstat -tulnp的參數-p在執行時需要root的權限,這裏使用suid的方式進行授權
[root@linux-node2 ~]# chmod u+s `which netstat`
[root@linux-node2 ~]# ll `which netstat`
-rwsr-xr-x. 1 root root 155000 8月   3 17:17 /usr/bin/netstat
*或者
sed -i '98a zabbix\tALL=(ALL)\tNOPASSWD: /bin/netstat' /etc/sudoers
sed -i 's@^Defaults requiretty@#Defaults requiretty@g' /etc/sudoers*

[root@linux-node1 ~]# zabbix_get -s linux-node2 -k discovery_mysql
{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"},{"{#MYSQLPORT}":"3306"}]}
    1. 編輯自定義key,獲取每個端口的狀態數據
[root@linux-node2 zabbix_agentd.d]# cat userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$2';" | HOME=/var/lib/zabbix mysql -uroot -p123456 -h 127.0.0.1 -P $1 -N | awk '{print $$2}'

修改不同端口的mysql密碼:
[root@linux-node2 zabbix_agentd.d]# mysqladmin -h 127.0.0.1 -uroot password '123456' -P3306
[root@linux-node2 zabbix_agentd.d]# mysqladmin -h 127.0.0.1 -uroot password '123456' -P3307
[root@linux-node2 zabbix_agentd.d]# mysqladmin -h 127.0.0.1 -uroot password '123456' -P3308
測試是否正常
[root@linux-node2 zabbix_agentd.d]# mysql -uroot -p123456 -h 127.0.0.1 -P3306 -e "use mysql;show GLOBAL VARIABLES like 'port';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
[root@linux-node2 zabbix_agentd.d]# mysql -uroot -p123456 -h 127.0.0.1 -P3307 -e "use mysql;show GLOBAL VARIABLES like 'port';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3307  |
+---------------+-------+
[root@linux-node2 zabbix_agentd.d]# mysql -uroot -p123456 -h 127.0.0.1 -P3308 -e "use mysql;show GLOBAL VARIABLES like 'port';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3308  |
+---------------+-------+
zabbix_get測試是否能正常獲取數據:
[root@linux-node1 ~]# zabbix_get -s linux-node2 -k mysql.status[3306,Bytes_sent]
1808
    1. 創建發現規則

這裏直接在linux-node2上進行創建

"Configuration"-->"Host"-->"linux-node2"-->"Discovery"-->"Create discovery rule"-->"Add"

linux監控詳細說明配置----zabbix(4.0)

創建 Item prototypes,其實就是一個創建一個 item

Item prototypes (0)>>create Item prototypes,按照官方模板來配置。這裏配5個展示

linux監控詳細說明配置----zabbix(4.0)

linux監控詳細說明配置----zabbix(4.0)

再查看Host中的item項,會多出以下監控項:

linux監控詳細說明配置----zabbix(4.0)

查看監控最新數據圖表,即可看到3306、3307、3308的數據庫狀態信息:

linux監控詳細說明配置----zabbix(4.0)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章