第4章Zabbix監控實踐

硬件監控Zabbix IPMI Interfacephp

系統監控Zabbix Agent Interface前端

Java監控Zabbix JMX Interfacejava

網絡設備監控Zabbix SNMP Interfacenode

應用服務監控Zabbix Agent UserParametermysql

MySQL數據庫監控percona-monitoring-plulginslinux

URL監控Zabbix Web 監控ios

這一會兒把以前乾的工做全集成到一個平臺上了。並且以前編寫的全部的應用服務的監控腳本,簡單修改就可使用。nginx

同時也能夠靈活的設置報警閾值、告警方式、告警升級、告警去重、告警依賴等等,同時還使用Zabbix的自動發現功能實現上線一臺服務器後,自動添加監控。git

使用Zabbix Proxy實現了多機房的分佈式監控,這簡直太棒了。web

對於告警通知:郵件、微信、短信、釘釘等,均可以與Zabbix快速的集成,網上有不少此類文檔。同時,針對某些能夠進行直接處理的報警,Zabbix能夠觸發Action來輕鬆幫你實現,故障的自動處理。+

1.1硬件監控

一般咱們的服務器上都會有遠程控制卡,如DelliDRAC,HPILOIBMIMM等,能夠經過Web界面來進行硬件的監控和管理工做,若是購買企業級的受權,還可使用控制檯進行管理。

Linux下,一般咱們使用IPMI來完成物理設備的監控工做,使用ipmi工具獲取溫度傳感器的數據,大於50就發一份郵件給維護人員

故障回想:以前我司託管在北京某機房的設備就出現過,由於恰好所在機櫃區域的空調壞了,致使服務器溫度太高,而後系統宕機。

1.2系統監控

系統監控標準(CPU、內存、硬盤、網絡、進程、TCP鏈接數)能夠經過  基礎模板Template OS Linux(徹底足夠) 來監控,根據本身的業務來調整合適的觸發器以及圖形等,便可。

CPU關於CPU,有3個重要的概念:上下文切換(context switchs),運行隊列(Run queue)和使用率(utilization)。這也是咱們CPU監控的三個重點。

一般狀況下,每一個處理器的運行隊列要小於等於3CPU 利用率中user/system比例維持在70/30,上下文切換要根據系統繁忙程度來綜合考量。監控工具備:top vmstat mpstat

內存:Linux虛擬內存是一個龐大的東東,一般咱們須要監控內存的使用率、SWAP使用率、同時能夠經過內存的使用率曲線來發現某些服務的內存溢出等。監控工具備:free vmstat

IOIO分爲磁盤IO和網絡IO。除了在作性能調優咱們要監控更詳細的數據外,那麼平常監控,只關注磁盤使用率、io wait便可,網絡也是監控網卡流量便可。監控工具備iostat iotop iftop

TCP監控:在不少狀況下有必要監控TCP的狀態,可使用netstat或者ss來獲取全部的TCP鏈接,來展示11種不一樣的TCP鏈接狀態的數量,能夠在大併發中及時發現TCP的相關故障。

其它的系統監控:運行的進程數、登錄用戶、文件加密等。

1.3應用監控

1.3.1TCP監控

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.編寫Shell腳本

[root@linux-node1 ~]# cd /etc/zabbix/scripts

[root@linux-node1 scripts]# vim tcp_status.sh

#!/bin/bash

############################################################

# $Name:         tcp_status.sh

# $Version:      v1.0

# $Function:     TCP Status

# $Author:       xuliangwei

# $organization: www.xuliangwei.com

# $Create Date:  2016-06-23

# $Description:  Monitor TCP Service Status

############################################################

[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1

tcp_status_fun(){

    TCP_STAT=$1

    ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.txt

    TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.txt | cut -d ' ' -f2)

    if [ -z "$TCP_STAT_VALUE" ];then

            TCP_STAT_VALUE=0

    fi

    echo $TCP_STAT_VALUE

}

tcp_status_fun $1;

添加執行權限

[root@linux-node1 scripts]# chmod +x tcp_status.sh

2.keylinux_tcp.conf的子配置文件以下:

[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf

UserParameter=tcp_status[*],/bin/bash /etc/zabbix/scripts/tcp_status.sh "$1"

3.重啓zabbix-agent,修改配置文件必須重啓

[root@linux-node1 ~]# systemctl restart  zabbix-agent

4.測試必定使用Zabbix_get獲取值(不要直接執行腳本)

[root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k tcp_status[ESTAB]

8

5.展現全部Key(記得將模板關聯主機)

4-1

6.查看圖形(圖形是自定義)

4-2

7.完成後,將模板導出保存,方便之後二次使用,這輩子在也不用添加11Key了。

1.3.2Nginx監控

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.nginx.confServer標籤中添加以下內容(若是nginx經過saltstack等配置管理工具進行統一管理,則須要在模板中統一加入這段配置)

    location /nginx_status {

        stub_status on;

        access_log  off;

        allow 127.0.0.1;

        deny all;

    }

3.本地訪問Nginx Status測試

[root@linux-node1 ~]# curl http://127.0.0.1/nginx_status

Active connections: 1

server accepts handled requests

 1 1 1

Reading: 0 Writing: 1 Waiting: 0

Nginx狀態解釋:

Active connectionsNginx正處理的活動連接數1

server             Nginx啓動到如今共處理了1個鏈接。

accepts             Nginx啓動到如今共成功建立1次握手。

handled requests   Nginx總共處理了1次請求。

Reading             Nginx讀取到客戶端的 Header 信息數。

Writing             Nginx返回給客戶端的 Header 信息數。

Waiting             Nginx已經處理完正在等候下一次請求指令的駐留連接,開啓。

Keep-alive的狀況下,這個值等於active-reading + writing)。

請求丟失數=(握手數-鏈接數)能夠看出,本次狀態顯示沒有丟失請求。

4.編寫NginxShell腳本(若是端口不一致,只須要修改腳本端口便可)

[root@linux-node1 ~]# cd /etc/zabbix/scripts

[root@linux-node1 scripts]# vim nginx_status.sh

#!/bin/bash

############################################################

# $Name:         nginx_status.sh

# $Version:      v1.0

# $Function:     Nginx Status

# $Author:       xuliangwei

# $organization: www.xuliangwei.com

# $Create Date:  2016-06-23

# $Description:  Monitor Nginx Service Status

############################################################

 

NGINX_PORT=80  #若是端口不一樣僅須要修改腳本便可,不然修改xml很麻煩

NGINX_COMMAND=$1

 

nginx_active(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'

}

 

nginx_reading(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'

}

 

nginx_writing(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'

       }

 

nginx_waiting(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'

       }

 

nginx_accepts(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'

       }

 

nginx_handled(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'

       }

 

nginx_requests(){

    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {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;

            ;;

    *)

            echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"

    esac

給腳本添加執行權限

[root@linux-node1 scripts]# chmod +x nginx_status.sh

5.keynginx_status.conf的子配置文件以下:

[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf

UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx/nginx_status.sh "$1"

6.重啓zabbix-agent

[root@linux-node1 ~]# systemctl restart  zabbix-agent

7.測試必定使用Zabbix_get來獲取值

[root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k nginx_status[writing]

1

8.展現全部Key(記得將模板關聯主機)如圖4-3

4-3

9.查看圖形,如圖4-4(圖形自定義)

4-4

1.3.3PHP-FPM監控

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.PHP-FPM工做模式一般與Nginx結合使用,修改php-fpm.conf(找到本身的php-fpm.conf存放路徑)

[root@linux-node1 ~]# vim /etc/php-fpm.d/www.conf  #php-fpm存放路徑

pm.status_path = /phpfpm_status

3.修改nginx.conf的配置文件,經過Nginx訪問PHP-FPM狀態。

   location ~ ^/(phpfpm_status)$ {

        include fastcgi_params;

        fastcgi_pass    127.0.0.1:9000;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

4.訪問測試phpfpm_status

[root@linux-node4 conf.d]# curl http://127.0.0.1/phpfpm_status

pool:                 www

process manager:      dynamic

start time:           05/Jul/2016:15:30:56 +0800

start since:          409

accepted conn:        22

listen queue:         0

max listen queue:     0

listen queue len:     128

idle processes:       4

active processes:     1

total processes:      5

max active processes: 2

max children reached: 0

PHP-FPM狀態解釋:

pool #fpm池名稱,大多數爲www

process manager #進程管理方式dynamic或者static

start time #啓動日誌,若是reloadfpm,時間會更新

start since #運行時間

accepted conn #當前池接受的請求數

listen queue #請求等待隊列,若是這個值不爲0,那麼須要增長FPM的進程數量

max listen queue #請求等待隊列最高的數量

listen queue len #socket等待隊列長度

idle processes #空閒進程數量

active processes #活躍進程數量

total processes #總進程數量

max active processes #最大的活躍進程數量(FPM啓動開始計算)

max children reached #程最大數量限制的次數,若是這個數量不爲0,那說明你的最大進程數量太小,能夠適當調整。

4.編寫php-fpmShell腳本(若是端口不一致,只須要修改腳本端口便可)

[root@linux-node1 ~]# cd /etc/zabbix/scripts

[root@linux-node1 scripts]# vim phpfpm_status.sh

#!/bin/bash

############################################################

# $Name:         phpfpm_status.sh

# $Version:      v1.0

# $Function:     Nginx Status

# $Author:       xuliangwei

# $organization: www.xuliangwei.com

# $Create Date:  2016-06-23

# $Description:  Monitor Nginx Service Status

############################################################

 

PHPFPM_COMMAND=$1

PHPFPM_PORT=80

 

start_since(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^start since:/ {print $NF}'

}

 

accepted_conn(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^accepted conn:/ {print $NF}'

}

 

listen_queue(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue:/ {print $NF}'

}

 

max_listen_queue(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max listen queue:/ {print $NF}'

}

 

listen_queue_len(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue len:/ {print $NF}'

}

 

idle_processes(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^idle processes:/ {print $NF}'

}

 

active_processes(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^active processes:/ {print $NF}'

}

 

total_processes(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^total processes:/ {print $NF}'

}

 

max_active_processes(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max active processes:/ {print $NF}'

}

 

max_children_reached(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max children reached:/ {print $NF}'

}

 

slow_requests(){

    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^slow requests:/ {print $NF}'

}

 

case $PHPFPM_COMMAND in

    start_since)

            start_since;

            ;;

    accepted_conn)

            accepted_conn;

            ;;

    listen_queue)

            listen_queue;

            ;;

    max_listen_queue)

            max_listen_queue;

            ;;

    listen_queue_len)

            listen_queue_len;

            ;;

    idle_processes)

            idle_processes;

            ;;

    active_processes)

            active_processes;

            ;;

        total_processes)

                total_processes;

                ;;

        max_active_processes)

                max_active_processes;

                ;;

        max_children_reached)

                max_children_reached;

                ;;

        slow_requests)

                slow_requests;

                ;;

    *)

            echo $"USAGE:$0 {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"

    esac

給腳本添加執行權限

[root@linux-node1 scripts]# chmod +x phpfpm_status.sh

5.keyphpfpm_status.conf的子配置文件以下:

[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf

UserParameter=phpfpm_status[*],/bin/bash /etc/zabbix/scripts/phpfpm_status.sh "$1"

6.重啓zabbix-agent

[root@linux-node1 ~]# systemctl restart  zabbix-agent

7.測試必定使用Zabbix_get來獲取值

[root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.90.11 -k phpfpm_status[accepted_conn]

45

7.展現全部Key(記得將模板關聯主機)如圖4-5

4-5

8.查看圖形,如圖4-4(圖形自定義)


4-6

1.3.4MySQL監控

percona Monitoring Plugins是一個高質量的組件,爲MySQL數據庫添加企業級的監控和圖表功能。其腳本使用PHP實現,故而Zabbix-Agent須要安裝php環境。

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.安裝percona Monitoring Plugins   percona工具集https://www.percona.com/software/documentation

[root@linux-node1 ~]# yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

[root@linux-node1 ~]# yum install percona-zabbix-templates -y

3.查看目錄結構

[root@linux-node1 percona]# tree /var/lib/zabbix/percona

/var/lib/zabbix/percona

├── scripts#腳本文件路徑

   ├── get_mysql_stats_wrapper.sh

   └── ss_get_mysql_stats.php

└── templates

    ├── userparameter_percona_mysql.conf#key文件位置

    └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #模板文件位置

4.key的的自配置文件複製至/etc/zabbix_agentd.conf.d目錄下(以實際目錄爲準)

[root@linux-node1 ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf/etc/zabbix/zabbix_agentd.d/percona_mysql.conf

5.重啓zabbix-agent

[root@linux-node1 ~]# systemctl restart zabbix-agent

6.修改腳本中的MySQL用戶名和密碼(能夠單獨創建一個用來作監控)

[root@linux-node1 scripts]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php

$mysql_user = 'root';

$mysql_pass = 'xuliangwei.com';

$mysql_port = 3306;

7. 測試必定使用Zabbix_get來獲取值(不然會失敗)

[root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k MySQL.pool-read-requests

223003813

8.若是獲取不到值常見問題

1.看是不是MySQL密碼錯誤

2.不要直接執行腳原本獲取

3.刪除/tmp/localhost-mysql_cacti_stats.txt文件(由於全部的值都會寫入到這個文件)

4.權限問題致使

9.導入percona自帶模板,如圖4-7、圖4-8

[root@linux-node1 templates]# sz/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #下載percona官網提供的模板

4-7

 

4-8

10.導入後將模板應用於主機,如圖4-9

4-9

1.3.5Tomcat監控

Zabbix中,JMX監控數據的獲取由專門的代理程序來實現,Zabbix-Java-Gateway來負責數據的採集,Zabbix-Java-GatewayJMXJava程序之間通訊獲取數據

JMXZabbix中的運行流程:

a)Zabbix-ServerZabbix-Java-Gateway獲取Java數據

b)Zabbix-Java-GatewayJava程序(zabbix-agent)獲取數據

c)Java程序返回數據給Zabbix-Java-Gateway

d)Zabbix-Java-Gateway返回數據給Zabbix-Server

e)Zabbix-Server進行數據展現

配置JMX監控的步驟:

a)安裝Zabbix-Java-Gateway

b)配置zabbix_java_gateway.conf參數。

c)配置zabbix-server.conf參數。

d)Tomcat應用開啓JMX協議。

e)ZabbixWeb配置JMX監控的Java應用。

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.安裝java以及zabbix-java-gateway (若是源碼安裝加上--enable-java參數)

[root@linux-node1 ~]# yum install  zabbix-java-gateway java-1.8.0-openjdk -y

3.啓動zabbix-java-gateway

[root@linux-node1 ~]# systemctl start zabbix-java-gateway

[root@linux-node1 ~]# netstat -lntup|grep 10052

tcp6       00 :::10052:::*                    LISTEN      13042/java

4.修改zabbix-server 配置文件

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf

JavaGateway=192.168.90.11  # java gateway地址(若是和zabbix-server裝一塊兒能夠寫127.0.0.1)

JavaGatewayPort=10052  #java gateway端口,默認端口10052

StartJavaPollers=5  #啓動進程輪詢java gateway

5.重啓zabbix-server

[root@linux-node1 ~]# systemctl restart zabbix-server

6.開啓tomcat的遠程jvm配置文件

[root@linux-node1 ~]# vim /usr/local/tomcat/bin/catalina.sh­#找到本身本機tomcat路徑(若是是salt來管,修改salt模板便可)

CATALINA_OPTS="$CATALINA_OPTS

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=12345

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.90.11"

7. 遠程jvm配置文件解釋

CATALINA_OPTS="$CATALINA_OPTS

-Dcom.sun.management.jmxremote # #啓用遠程監控JMX

-Dcom.sun.management.jmxremote.port=12345 #jmx遠程端口,Zabbix添加時必須一致

-Dcom.sun.management.jmxremote.authenticate=false #不開啓用戶密碼認證

-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.90.11" #運行tomcat服務IP(不要填寫錯了)

5.重啓tomcat服務

[root@linux-node1 ~]# /usr/local/tomcat/bin/shutdown.sh

[root@linux-node1 ~]# /usr/local/tomcat/bin/startup.sh

6.zabbix添加tomcat主機,並添加Zabbix自帶java監控模板,如圖4-10、圖4-11、圖4-12

4-10

4-11

4-12

9.查看圖形,如圖4-13

4-13

10.自帶的監控可能沒法知足企業需求,你們能夠根據公司的業務定製不一樣的JVM監控模板。

1.3.6Redis監控

Redis使用自帶的INFO命令,行狀態監控。以一種易於解釋且易於閱讀的格式,返回關於 Redis 服務器的各類信息和統計數值。

1.配置全部Agent(標準化目錄結構)

[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key

Include=/etc/zabbix/zabbix_agentd.d/*.conf 

[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本

2.編寫Shell腳本

q   腳本端口、鏈接redis服務地址根據具體狀況進行修改

q   AUTH認證沒有開啓,將PASSWD修改成空便可。

[root@linux-node1 ~]# cd /etc/zabbix/scripts

[root@linux-node1 scripts]# vim redis_status.sh

#!/bin/bash

############################################################

# $Name:         redis_status.sh

# $Version:      v1.0

# $Function:     Redis Status

# $Author:       xuliangwei

# $organization: www.xuliangwei.com

# $Create Date:  2016-06-23

# $Description:  Monitor Redis Service Status

############################################################

 

R_COMMAND="$1"

R_PORT="6379"  #根據實際狀況調整端口

R_SERVER="127.0.0.1"  #根據具體狀況調整IP地址

PASSWD="123"       #若是沒有設置Redis密碼,爲空便可

 

 

redis_status(){

   (echo -en "AUTH $PASSWD\r\nINFO\r\n";sleep 1;) | /usr/bin/nc "$R_SERVER" "$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"

}

 

case $R_COMMAND in

    used_cpu_user_children)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    used_cpu_sys)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    total_commands_processed)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    role)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    lru_clock)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    latest_fork_usec)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    keyspace_misses)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    keyspace_hits)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    keys)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    expires)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    expired_keys)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    evicted_keys)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    connected_clients)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    changes_since_last_save)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    blocked_clients)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    bgsave_in_progress)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    bgrewriteaof_in_progress)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    used_memory_peak)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    used_memory)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    used_cpu_user)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    used_cpu_sys_children)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    total_connections_received)

    redis_status "$R_PORT" "$R_COMMAND"

    ;;

    *)

    echo $"USAGE:$0 {used_cpu_user_children|used_cpu_sys|total_commands_processed|role|lru_clock|latest_fork_usec|keyspace_misses|keyspace_hits|keys|expires|expired_keys|connected_clients|changes_since_last_save|blocked_clients|bgrewriteaof_in_progress|used_memory_peak|used_memory|used_cpu_user|used_cpu_sys_children|total_connections_received}"

    esac

Redis狀態解釋:

server : Redis 服務器信息,包含如下域:

redis_version : Redis 服務器版本

redis_git_sha1 : Git SHA1

redis_git_dirty : Git dirty flag

os : Redis 服務器的宿主操做系統

arch_bits : 架構(32 64 位)

multiplexing_api : Redis 所使用的事件處理機制

gcc_version : 編譯 Redis 時所使用的 GCC 版本

process_id : 服務器進程的 PID

run_id : Redis 服務器的隨機標識符(用於 Sentinel 和集羣)

tcp_port : TCP/IP 監聽端口

uptime_in_seconds : Redis 服務器啓動以來,通過的秒數

uptime_in_days : Redis 服務器啓動以來,通過的天數

lru_clock : 以分鐘爲單位進行自增的時鐘,用於 LRU 管理

clients : 已鏈接客戶端信息,包含如下域:

connected_clients : 已鏈接客戶端的數量(不包括經過從屬服務器鏈接的客戶端)

client_longest_output_list : 當前鏈接的客戶端當中,最長的輸出列表

client_longest_input_buf : 當前鏈接的客戶端當中,最大輸入緩存

blocked_clients : 正在等待阻塞命令(BLPOPBRPOPBRPOPLPUSH)的客戶端的數量

memory : 內存信息,包含如下域:

used_memory : Redis 分配器分配的內存總量,以字節(byte)爲單位

used_memory_human : 以人類可讀的格式返回 Redis 分配的內存總量

used_memory_rss : 從操做系統的角度,返回 Redis 已分配的內存總量(俗稱常駐集大小)。這個值和 top ps 等命令的輸出一致。

used_memory_peak : Redis 的內存消耗峯值(以字節爲單位)

used_memory_peak_human : 以人類可讀的格式返回 Redis 的內存消耗峯值

used_memory_lua : Lua 引擎所使用的內存大小(以字節爲單位)

mem_fragmentation_ratio : used_memory_rss used_memory 之間的比率

persistence : RDB AOF 的相關信息

stats : 通常統計信息

replication : /從複製信息

cpu : CPU 計算量統計信息

commandstats : Redis 命令統計信息

cluster : Redis 集羣信息

keyspace : 數據庫相關的統計信息

參數還能夠是下面這兩個:

all : 返回全部信息

default : 返回默認選擇的信息

當不帶參數直接調用 INFO 命令時,使用 default 做爲默認參數。

3.給腳本添加執行權限

[root@linux-node1 scripts]# chmod +x redis_status.sh

4.Zabbix權限不足處理辦法

[root@linux-node1 ~]# rm -f /tmp/redis_6379.tmp

5.keyredis_status.conf的子配置文件以下:

[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/redis_status.conf

UserParameter=redis_status[*],/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"

6.重啓zabbix-agent

[root@linux-node1 ~]# systemctl restart  zabbix-agent

7.測試必定使用Zabbix_get來獲取值

[root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k redis_status[used_cpu_sys]

16.81

8.展現全部Key(記得將模板關聯主機)如圖4-14

4-14

9.查看圖形,如圖4-15、圖4-16(圖形自定義)

4-15

4-16

1.3.7Memcached監控

1.3.8RabbitMQ監控

1.4WEB監控

Web監控是用來監控Web程序的,經過模擬用戶訪問網站,對特定的結果進行比較,下載速度、響應時間、返回狀態碼、返回字符串等特定的數據進行比較和監控,從而判斷網站的Web服務的可用性。其實這些操做咱們能夠經過腳本、程序來進行自定義監控。如:Linux下的curl命令、以及現有的程序和http庫均可以幫咱們完成這項需求。

瞭解監控性能指標如表4-1

特徵

釋說

HTTP速度

器性能

速度

存和壓縮

特定的指標進行抽樣監控,即便發現的可用性和性能指

HTTP速度

 

特定的文件抽

HTTP態碼

重點40X50X

404接是影響性能的一個重要指50X表示服器內部故障

4-1

以監控Zabbixweb程序爲例展開監控,展現如何使用Web minitoring

1.單擊ConfigurationTemplates→點擊WebCreate Web scanario,建立一個Scenario(能夠在host或者templates上建立)如圖4-17

4-17

2.單擊Create web Scenario 出現如圖4-18界面

4-18

其中各參數含義:

q   NameWeb監控的名稱,具備惟一性。(支持使用宏)

q   Application:選擇Web監控屬於哪一個組。

q   New Application:建立新的組。

q   Update intervalScenari間隔的時間,單位是秒。

q   Attempts:重試次數。

q   Agent:瀏覽器類型,支持自定義。

q   HTTP proxyHTTP代理格式,端口使用1080

q   VariablesScenario的變量。

q   Headers:標題

3.steps表示能夠按步驟設置多個監控項,如圖4-19是添加Steps的監控項。

4-19

其中,各參數的含義以下:

Name:名稱。

URL:監控的web頁面(全路徑帶頁面名)

Post:傳遞給頁面的參數,多個參數之間用&鏈接。(能夠引用定義好的變量)

Variables:設置變量。

Timeout:超時時間。

Required string:頁面中嗯那個匹配到字符,若不匹配,則認爲出錯。

Required Status code:頁面返回碼。

若是有多個Url,依次添加,如圖4-20

4-20

4.Authentication認證,Zabbix登錄須要用戶名密碼,如圖4-21

4-21

5.添加好後的監控數據,點擊MonitoringWeb(不要忘記將模板link到一臺主機)如圖4-22

4-22

6.建立web 主頁返回時間的觸發器Configrationtemplate(對應web監控模板)triggercreate triggerZabbixweb監控自帶itme)如圖4-23

4-23

1.5流量分析

piwik(開源產品)google分析、百度統計、站長工具等等一堆統計的東西,只須要在頁面嵌入一個js便可。

流量分析對於一家電商公司來講,經過對訂單來源的統計和分析,能夠了解咱們在某個網站上的廣告投入有沒有收到預期的效果。能夠區分不一樣地區的訪問人數、甚至商品交易額等。

做爲一名運維工程師頗有必要掌握公司站點的各類訪問詳情。

做爲運維人員應該注意的問題? 例如:如今有一個在一個活動產品上線?

1.瞭解業務部門這次產品上線時間以及推廣費用爲多少,而後調整機房服務器帶寬流量

2. 查看沒有上線和上線以後網站的pv uvip數目,結合piwik zabbix截圖分析

3.上線以後瞭解業務部門訂單數量,增加率等等

4.查看數據庫和前端web是否有性能瓶頸

1.6網絡監控

網絡監控是咱們構建監控平臺是必需要考慮的,尤爲是針對有多個機房的場景,各個機房之間的網絡狀態,機房和全國各地的網絡狀態都是咱們須要重點關注的對象,那麼如何掌握這些狀態信息呢?咱們須要藉助於網絡監控工具Smokeping

Smokeping rrdtool的做者Tobi Oetiker的做品,是用Perl寫的,主要是監視網絡性能,www 服務器性能,dns查詢性能等,使用rrdtool繪圖,並且支持分佈式,直接從多個agent進行數據的彙總。

同時,因爲本身監控點比較少,還能夠藉助不少商業的監控工具,好比監控寶、基調、博瑞等。同時這些服務提供商還能夠幫助你監控CDN的狀態。

1.7安全監控

針對四層物理設備可使用iptables、以及硬件防火牆。雲環境能夠直接使用自帶防火牆功能。

針對七層Web層面經過Nginx + Lua編寫了一個WAF,而後把相關的日誌記錄到了Elasticsearch中,經過kibana能夠圖形化的展現不一樣的攻擊類型的統計。

同時可使用安全產品,放DDOS攻擊,安全保、百度加速樂,牛盾雲安全。等等。

1.8日誌監控

一般狀況下,系統會產生系統日誌、應用程序會有應用的訪問日誌、錯誤日誌,服務有運行日誌等,可使用ELK來進行日誌監控。

對於日誌來講,最多見的需求就是收集、存儲、查詢、展現,開源社區正好有相對應的開源項目:

logstash(收集)

elasticsearch(存儲+搜索)

kibana(展現)

咱們將這三個組合起來的技術稱之爲ELK Stack,因此說ELK Stack指的是ElasticsearchLogstashKibana技術棧的結合。

若是收集了錯誤日誌,那麼若是部署更新有異常出現,能夠當即在kibana上看到。固然也可使用Zabbix來進行錯誤日誌的過濾來進行告警。

1.9業務監控

小王再去向經理彙報,剛走到門口被總經理碰上了,張總說:小王啊,大家經理彙報你最近監控工做乾的不錯,你給我說下,我們如今10點的時候總訂單是多少,每分鐘平均訂單有多少?

小王又蒙了,我本身也曾經就是那個小王!

沒有業務指標監控的監控平臺是一個不完善的監控平臺,一般在咱們作監控系統中,必須將咱們重要的業務指標進行監控,並設置閾值進行告警通知。

好比每分鐘的訂單、每分鐘註冊、日活用戶、短信使用量等重要的業務指標均可以加入到Zabbix上。

1.10可視化監控

通過小王的各類努力,終於一個相對完善的監控平臺使用Zabbix構建起來了,小王爲此還作一個漂亮的screen,來進行展現,可是有一天忽然訂單量特別少,張總又一次到了運維部,但失望而歸,由於整個監控體系並不能反映出來訂單量爲何減小了?

運維的重要目標之一就是數據的可視化,一個監控平臺不能很好的反映出來業務的波動,就是耍流氓。以前的一切努力在業務部門的領導中變得一文不值!!!咱們能作的有如下幾點:

面向傳統運維:

儘量的完善業務監控,若是有專門的業務分析系統,要想辦法和運維的監控平臺進行結合。

梳理清楚各個子系統之間和業務的關係,好比若是忽然間流量增長了50M,可以快速的知道這50M流量到了那個業務系統上,訪問的哪些URL,以及這個業務系統的相關狀態。

面向DevOps

將全部的監控項和業務之間創建關係樹,好比業務、網絡、系統、數據庫、流量、推廣活動(流量分析)之間能夠造成一個龐大的關係鏈。這是一個比較龐大的工程,業務是多變的,如何讓監控平臺能儘量的適應多變的業務是一個艱鉅的任務。

相關文章
相關標籤/搜索