知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
# sudo apt-get install zabbix-agent
/etc/zabbix/zabbix_agent.conf
#Server=localhost Server=your_server_ip_address
# vim /etc/services zabbix-agent 10050/tcp #Zabbix Agent zabbix-agent 10050/udp #Zabbix Agent
# sudo /etc/init.d/zabbix-agent restart
yum localinstall -y http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm yum install -y zabbix-agent cp /etc/zabbix/zabbix_agentd.conf{,.original} sed -i "s/# SourceIP=/SourceIP=zabbix_server_ip/" /etc/zabbix/zabbix_agentd.conf sed -i "s/Server=127.0.0.1/Server=zabbix_server_ip/" /etc/zabbix/zabbix_agentd.conf sed -i "s/ServerActive=127.0.0.1/ServerActive=zabbix_server_ip/" /etc/zabbix/zabbix_agentd.conf sed -i "s/Hostname=Zabbix server/Hostname=Alpha Testing/" /etc/zabbix/zabbix_agentd.conf systemctl enable zabbix-agent.service systemctl start zabbix-agent.service iptable -A INPUT -s zabbix_server_ip -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
例 2.1. zabbix-agent 配置實例
# grep -v "^#" /etc/zabbix/zabbix_agentd.conf | grep -v "^$" PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 SourceIP=147.90.4.87 Server=147.90.4.87 ServerActive=147.90.4.87 Hostname=Alpha Testing Include=/etc/zabbix/zabbix_agentd.d/*.conf
配置完成
測試工具
# zabbix_agentd --test dependency.discovery dependency.discovery [t|{"data":[ {"{#NAME}":"UCWEB","{#IP}":"115.84.241.16","{#PORT}":"6666"},{"{#NAME}":"Redis","{#IP}":"115.84.241.16","{#PORT}":"6379"},{"{#NAME}":"Binary","{#IP}":"223.197.79.114","{#PORT}":"80"},{"{#NAME}":"SMS","{#IP}":"192.230.90.194","{#PORT}":"80"},{"{#NAME}":"CF1","{#IP}":"192.168.42.153","{#PORT}":"8080"},{"{#NAME}":"CF2","{#IP}":"192.168.42.134","{#PORT}":"8008"},{"{#NAME}":"CF3","{#IP}":"192.168.42.177","{#PORT}":"8080"},{"{#NAME}":"EDM","{#IP}":"47.89.27.78","{#PORT}":"80"} ]}]
nginx status 監控擴展包 https://github.com/oscm/zabbix/tree/master/nginx
從 localhost 收集 nginx 狀態信息
server { listen 80; server_name localhost; location /status { stub_status on; access_log off; allow 127.0.0.1; deny all; } }
配置 zabbix_agentd
創建配置檔案 /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf 內容如下:
############################################################ # Redis - statistics # # Author: Neo Chen <netkiller@msn.com> # Website: http://www.netkiller.cn ############################################################ # Discovery # Return Redis statistics UserParameter=nginx.status[*],/srv/zabbix/libexec/nginx.sh $1
安裝數據採集腳本,請使用 nginx.sh
mkdir -p /srv/zabbix/libexec vim /srv/zabbix/libexec/nginx.sh chmod +x /srv/zabbix/libexec/nginx.sh # /srv/zabbix/libexec/nginx.sh Usage /srv/zabbix/libexec/nginx.sh {check|active|accepts|handled|requests|reading|writing|waiting} # /srv/zabbix/libexec/nginx.sh accepts 82 # systemctl restart zabbix-agent.service
使用 zabbix-get 工具從 Zabbix Server 連結 Zabbix Agent 測試是否正常工作
Test Agent # yum install -y zabbix-get # zabbix_get -s <agent_ip_address> -k 'nginx.status[accepts]' 109
最後進入Zabbix Web界面導入模板 zbx_export_templates.xml
Import file: choice xml file click "import" button Imported successfully 表示成功導入
獲取最新模板以及腳本請訪問 https://github.com/oscm/zabbix/tree/master/redis
創建代理配置檔案
cat > /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf <<'EOF' ############################################################ # Redis - statistics # # Author: Neo Chen <netkiller@msn.com> # Website: http://www.netkiller.cn ############################################################ # Discovery # Return Redis statistics UserParameter=redis.status[*],redis-cli -h 127.0.0.1 -p 6379 info|grep $1|cut -d : -f2 UserParameter=redis.proc,pidof redis-server | wc -l EOF
重啟代理服務
systemctl restart zabbix-agent.service
測試
# zabbix_get -s www.netkiller.cn -k redis.status[redis_version] 2.8.19
導入模板檔案
獲取最新模板以及腳本請訪問 https://github.com/oscm/zabbix/tree/master/mongodb
創建監控用戶
[root@netkiller www.netkiller.cn]# mongo -u admin -p D90YVqwmUATUeFSxfRo14 admin > use admin switched to db admin > db.createUser( { user: "monitor", pwd: "chen", roles: [ "clusterMonitor"] } ) Successfully added user: { "user" : "monitor", "roles" : [ "clusterMonitor" ] } > db.auth("monitor", "netkiller") 1 > exit bye
# echo "db.stats();" | mongo -u monitor -p chen admin MongoDB shell version: 2.6.12 connecting to: test { "db" : "test", "collections" : 0, "objects" : 0, "avgObjSize" : 0, "dataSize" : 0, "storageSize" : 0, "numExtents" : 0, "indexes" : 0, "indexSize" : 0, "fileSize" : 0, "dataFileVersion" : { }, "ok" : 1 } bye [root@iZ62sreab5qZ www.cf88.com]# echo "db.serverStatus()" | mongo -u monitor -p chen admin | more MongoDB shell version: 2.6.12 connecting to: admin { "host" : "iZ62sreab5qZ", "version" : "2.6.12", "process" : "mongod", "pid" : NumberLong(612), "uptime" : 852982, "uptimeMillis" : NumberLong(852982589), "uptimeEstimate" : 845317, "localTime" : ISODate("2016-11-23T07:02:42.899Z"), "asserts" : { "regular" : 0, "warning" : 0, "msg" : 0, "user" : 26, "rollovers" : 0 }, "backgroundFlushing" : { "flushes" : 14216, "total_ms" : 251465, "average_ms" : 17.688871693866066, "last_ms" : 7, "last_finished" : ISODate("2016-11-23T07:02:23.283Z") }, "connections" : { "current" : 16, "available" : 51184, "totalCreated" : NumberLong(566) }, "cursors" : { "note" : "deprecated, use server status metrics", "clientCursors_size" : 0, "totalOpen" : 0, "pinned" : 0, "totalNoTimeout" : 0, "timedOut" : 8 }, "dur" : { "commits" : 30, "journaledMB" : 0, "writeToDataFilesMB" : 0, "compression" : 0, "commitsInWriteLock" : 0, "earlyCommits" : 0, "timeMs" : { "dt" : 3068, "prepLogBuffer" : 0, "writeToJournal" : 0, "writeToDataFiles" : 0, "remapPrivateView" : 0 } }, --More--
cat > /etc/zabbix/zabbix_agentd.d/userparameter_mongodb.conf <<'EOF' ############################################################ # MongoDB - statistics # # Author: Neo Chen <netkiller@msn.com> # Website: http://www.netkiller.cn ############################################################ # Discovery # Return Redis statistics UserParameter=mongodb.status[*],/srv/zabbix/libexec/mongodb.sh $1 $2 $3 $4 $5 EOF
安裝採集腳本,創建 /srv/zabbix/libexec/mongodb.sh 檔案
cat /srv/zabbix/libexec/mongodb.sh #!/bin/bash ################################################## # AUTHOR: Neo <netkiller@msn.com> # WEBSITE: http://www.netkiller.cn # Description:zabbix mongodb monitor # Note:Zabbix 3.2 # DateTime: 2016-11-23 ################################################## HOST=localhost PORT=27017 USER=monitor PASS=chen index=$(echo $@ | tr " " ".") status=$(echo "db.serverStatus().${index}" |mongo -u ${USER} -p ${PASS} admin --port ${PORT}|sed -n '3p') #check if the output contains "NumberLong" if [[ "$status" =~ "NumberLong" ]];then echo $status|sed -n 's/NumberLong(//p'|sed -n 's/)//p' else echo $status fi # chmod +x /srv/zabbix/libexec/mongodb.sh # /srv/zabbix/libexec/mongodb.sh version 2.6.12 # systemctl restart zabbix-agent.service
[root@netkiller ~]# zabbix_get -s www.netkiller.cn -k mongodb.status[ok] 1 [root@netkiller ~]# zabbix_get -s www.netkiller.cn -k mongodb.status[version] 2.6.12
測試成功後導入模板
監控內容如下
連結數監控(當前連接數和可用連接數) mongodb current mongodb.status[connections,current] mongodb available mongodb.status[connections,available] 流量監控(每秒請求數,出站流量,入站流量) mongodb mongodb.status[network,numRequests] mongodb mongodb.status[network,bytesOut] mongodb mongodb.status[network,bytesIn] 命令統計(查詢,更新,插入,刪除......) mongodb query/s mongodb.status[opcounters,query] mongodb update/s mongodb.status[opcounters,update] mongodb insert/s mongodb.status[opcounters,insert] mongodb getmore/s mongodb.status[opcounters,getmore] mongodb delete/s mongodb.status[opcounters,delete] mongodb command/s mongodb.status[opcounters,command] 內存監控 mongodb mem virtual mongodb.status[mem,virtual] mongodb mem resident mongodb.status[mem,resident] mongodb mem mapped mongodb.status[mem,mapped] mongodb mem mappedWithJournal mongodb.status[mem,mappedWithJournal] 複製監控 mongodb repl mongodb.status[repl,ismaster] 鎖監控 # zabbix_get -s www.chuangfu24.net -k mongodb.status[locks,admin,timeAcquiringMicros,r]
獲取最新模板以及腳本請訪問 https://github.com/oscm/zabbix/tree/master/php-fpm
這裡假設你是採用 yum install php-fpm 方式安裝的
sed -i "s/;pm.status_path/pm.status_path/" /etc/php-fpm.d/www.conf sed -i "s/;ping/ping/" /etc/php-fpm.d/www.conf systemctl reload php-fpm
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location /stub_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } location ~ ^/(status|ping)$ { access_log off; allow 127.0.0.1; deny all; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; } }
採集腳本 /srv/zabbix/libexec/php-fpm.xml.sh
#!/bin/bash ################################################## # AUTHOR: Neo <netkiller@msn.com> # WEBSITE: http://www.netkiller.cn # Description:zabbix 通過 status 模組監控 php-fpm # Note:Zabbix 3.2 # DateTime: 2016-11-22 ################################################## HOST="localhost" PORT="80" status="status" function query() { curl -s http://${HOST}:${PORT}/${status}?xml | grep "$1" | awk -F'>|<' '{ print $3}' } if [ $# == 0 ]; then echo $"Usage $0 {pool|process-manager|start-time|start-since|accepted-conn|listen-queue|max-listen-queue|listen-queue-len|idle-processes|active-processes|total-processes|max-active-processes|max-children-reached|slow-requests}" exit else query "$1" fi
創建zabbix代理配置檔案 /etc/zabbix/zabbix_agentd.d/userparameter_php-fpm.conf
############################################################ # Netkiller PHP-FPM - statistics # # Author: Neo Chen <netkiller@msn.com> # Website: http://www.netkiller.cn ############################################################ # Discovery # Return statistics UserParameter=php-fpm.status[*],/srv/zabbix/libexec/php-fpm.xml.sh $1
從zabbix server 運行下面命令測試是否可以正確獲得數據
# zabbix_get -s node.netkiller.cn -k 'php-fpm.status[listen-queue-len]' 128
php-fpm 可以帶參數json、xml、html並且前面三個參數可以分別和full做一個組合。
status 詳解 ----- pool – fpm池子名稱,大多數為www process manager – 進程管理方式,值:static, dynamic or ondemand. dynamic start time – 啟動日期,如果reload了php-fpm,時間會更新 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,那說明你的最大進程數量太小了,請改大一點。 slow requests – 啟用了php-fpm slow-log,緩慢請求的數量 full詳解 ----- pid – 進程PID,可以單獨kill這個進程. state – 當前進程的狀態 (Idle, Running, …) start time – 進程啟動的日期 start since – 當前進程運行時長 requests – 當前進程處理了多少個請求 request duration – 請求時長(微妙) request method – 請求方法 (GET, POST, …) request URI – 請求URI content length – 請求內容長度 (僅用於 POST) user – 用戶 (PHP_AUTH_USER) (or ‘-’ 如果沒設置) script – PHP腳本 (or ‘-’ if not set) last request cpu – 最後一個請求CPU使用率。 last request memorythe - 上一個請求使用的內存
[root@netkiller tmp]# curl http://localhost/status pool: www process manager: dynamic start time: 25/Nov/2016:10:31:32 +0800 start since: 2337 accepted conn: 191 listen queue: 0 max listen queue: 0 listen queue len: 128 idle processes: 5 active processes: 1 total processes: 6 max active processes: 1 max children reached: 0 slow requests: 0 [root@netkiller tmp]# curl http://localhost/status?full pool: www process manager: dynamic start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 accepted conn: 192 listen queue: 0 max listen queue: 0 listen queue len: 128 idle processes: 5 active processes: 1 total processes: 6 max active processes: 1 max children reached: 0 slow requests: 0 ************************ pid: 27329 state: Running start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 requests: 33 request duration: 140 request method: GET request URI: /status?full content length: 0 user: - script: - last request cpu: 0.00 last request memory: 0 ************************ pid: 27330 state: Idle start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 requests: 32 request duration: 111 request method: GET request URI: /status?xml content length: 0 user: - script: - last request cpu: 0.00 last request memory: 262144 ************************ pid: 27331 state: Idle start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 requests: 32 request duration: 110 request method: GET request URI: /status?xml content length: 0 user: - script: - last request cpu: 0.00 last request memory: 262144 ************************ pid: 27332 state: Idle start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 requests: 32 request duration: 106 request method: GET request URI: /status?xml content length: 0 user: - script: - last request cpu: 0.00 last request memory: 262144 ************************ pid: 27333 state: Idle start time: 25/Nov/2016:10:31:32 +0800 start since: 2343 requests: 32 request duration: 90 request method: GET request URI: /status content length: 0 user: - script: - last request cpu: 0.00 last request memory: 262144 ************************ pid: 27557 state: Idle start time: 25/Nov/2016:10:33:43 +0800 start since: 2212 requests: 31 request duration: 131 request method: GET request URI: /status?xml content length: 0 user: - script: - last request cpu: 0.00 last request memory: 262144
[root@netkiller tmp]# curl http://localhost/status?json {"pool":"www","process manager":"dynamic","start time":1480041092,"start since":2308,"accepted conn":181,"listen queue":0,"max listen queue":0,"listen queue len":128,"idle processes":5,"active processes":1,"total processes":6,"max active processes":1,"max children reached":0,"slow requests":0}
[root@netkiller tmp]# curl http://localhost/status?xml <?xml version="1.0" ?> <status> <pool>www</pool> <process-manager>dynamic</process-manager> <start-time>1480041092</start-time> <start-since>2520</start-since> <accepted-conn>226</accepted-conn> <listen-queue>0</listen-queue> <max-listen-queue>0</max-listen-queue> <listen-queue-len>128</listen-queue-len> <idle-processes>5</idle-processes> <active-processes>1</active-processes> <total-processes>6</total-processes> <max-active-processes>1</max-active-processes> <max-children-reached>0</max-children-reached> <slow-requests>0</slow-requests>
[root@netkiller tmp]# curl http://localhost/status?html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head><title>PHP-FPM Status Page</title></head> <body> <table> <tr><th>pool</th><td>www</td></tr> <tr><th>process manager</th><td>dynamic</td></tr> <tr><th>start time</th><td>25/Nov/2016:10:31:32 +0800</td></tr> <tr><th>start since</th><td>2486</td></tr> <tr><th>accepted conn</th><td>216</td></tr> <tr><th>listen queue</th><td>0</td></tr> <tr><th>max listen queue</th><td>0</td></tr> <tr><th>listen queue len</th><td>128</td></tr> <tr><th>idle processes</th><td>5</td></tr> <tr><th>active processes</th><td>1</td></tr> <tr><th>total processes</th><td>6</td></tr> <tr><th>max active processes</th><td>1</td></tr> <tr><th>max children reached</th><td>0</td></tr> <tr><th>slow requests</th><td>0</td></tr> </table> </body></html>
獲取最新模板以及腳本請訪問 https://github.com/oscm/zabbix/tree/master/elasticsearch
首先導入模板 https://github.com/oscm/zabbix/blob/master/elasticsearch/zbx_export_templates.xml
一步步運行下面腳本即可
# yum install -y python34 # wget https://raw.githubusercontent.com/oscm/zabbix/master/elasticsearch/elasticsearch -P /srv/zabbix/libexec # chmod +x /srv/zabbix/libexec/elasticsearch # /srv/zabbix/libexec/elasticsearch indices _all.total.flush.total_time_in_millis 25557
運行腳本安裝代理配置檔案
# wget https://raw.githubusercontent.com/oscm/zabbix/master/elasticsearch/userparameter_elasticsearch.conf -P /etc/zabbix/zabbix_agentd.d/ # systemctl restart zabbix-agent
測試Zabbix Agent 工作是否正常
# zabbix_get -s 10.47.33.14 -k 'elasticsearch.status[indices,_all.total.flush.total_time_in_millis]' 25557
獲取最新模板以及腳本請訪問 https://github.com/oscm/zabbix/tree/master/postfix
首先導入模板 https://github.com/oscm/zabbix/blob/master/postfix/zbx_export_templates.xml
一步步運行下面腳本即可
# chmod +r /var/log/maillog # mkdir -p /srv/zabbix/libexec # yum install -y logcheck # wget https://raw.githubusercontent.com/oscm/zabbix/master/postfix/postfix -P /srv/zabbix/libexec # chmod +x /srv/zabbix/libexec/postfix
測試腳本
# /srv/zabbix/libexec/postfix queue active 1418
# wget https://raw.githubusercontent.com/oscm/zabbix/master/postfix/userparameter_postfix.conf -P /etc/zabbix/zabbix_agentd.d/ # systemctl restart zabbix-agent
[root@netkiller ~]# zabbix_get -s 173.24.22.53 -k 'agent.ping' 1 [root@netkiller ~]# zabbix_get -s 173.24.22.53 -k 'postfix[queue,active]' 1140 [root@netkiller ~]# zabbix_get -s 173.24.22.53 -k 'postfix[queue,deferred]' 149 [root@netkiller ~]# zabbix_get -s 173.24.22.53 -k 'postfix[log,sent]' 10931
curl -s https://raw.githubusercontent.com/oscm/shell/master/monitor/zabbix/zabbix-agent/tcpstats.sh | bash
curl -s https://raw.githubusercontent.com/oscm/shell/master/monitor/zabbix/zabbix-agent/dependency.sh | bash
創建JDBC配置檔案 /srv/zabbix/conf/jdbc.properties
# Oracle 單機環境 jdbc.url=jdbc:oracle:thin:@//172.16.0.10:1521/oral # Oracle RAC 環境 # jdbc.url=jdbc\:oracle\:thin\:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.0.5)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=ON)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=oral)(FAILOVER_MODE=(TYPE=SESSION)(METHOD=BASIC)))) jdbc.username=neo jdbc.password=netkiller