監控中心Zabbix進階(轉)
監控中心Zabbix進階
一、Zabbix 基於SNMP監控
1、介紹
-
SNMP:簡單網路管理協議;(非常古老的協議)
-
三種通訊方式:讀(get, getnext)、寫(set)、trap(陷阱);
-
埠:
161/udp
162/udp
- SNMP協議:年代久遠
v1: 1989
v2c 1993
v3: 1998
-
監控網路裝置:交換機、路由器
-
MIB:Management Information Base 資訊管理基礎
-
OID:Object ID 物件ID
2、Linux 啟用 snmp
[root@node1 ~]# yum install net-snmp net-snmp-utils
配置檔案:定義ACL
[root@node1 ~]# vim /etc/snmp/snmpd.conf
啟動服務:
[root@node1 ~]# systemctl start snmpd # 被監控端開啟的服務
[root@node1 ~]# systemctl start snmptrapd # 監控端開啟的服務(如果允許被監控端啟動主動監控時啟用)
3、配置檔案的介紹
開放資料:4步
1、定義認證符,將社群名稱"public"對映為"安全名稱"
2、將安全名稱對映到一個組名
3、為我們建立一個檢視,讓我們的團隊有權利
掩碼:我列出一些註釋,有很多,可以再網上查詢
.1.3.6.1.2.1.
1.1.0:系統描述資訊,SysDesc
1.3.0:監控時間, SysUptime
1.5.0:主機名,SysName
1.7.0:主機提供的服務,SysService
.1.3.6.1.2.2.
2.1.0:網路介面數目
2.2.1.2:網路介面的描述資訊
2.2.1.3:網路介面型別
……
4、授予對systemview檢視的只讀訪問權
4、測試工具
[root@node1 ~]# snmpget -v 2c -c public HOST OID [root@node1 ~]# snmpwalk -v 2c -c public HOST OID # 通過這個埠查詢到的資料,全列出了
4、配置SNMP監控
1、下載,修改配置檔案
[root@node1 ~]# vim /etc/snmp/snmpd.conf
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.2 # 網路介面的相關資料
view systemview included .1.3.6.1.4.1.2021 # 系統資源負載,memory, disk io, cpu load
view systemview included .1.3.6.1.2.1.25
2、在 agent 上測試
[root@node1 ~]# snmpget -v 2c -c public 192.168.30.2 .1.3.6.1.2.1.1.3.0
[root@node1 ~]# snmpget -v 2c -c public 192.168.30.2 .1.3.6.1.2.1.1.5.0
3、在監控頁面,給node2加一個snmp的介面
4、在 node2 上加一個 Template OS Linux SNMPv2 模板
- 模板新增成功,生成一系列東西
- 點開一個item 看一下
5、生成一些最新資料的圖形 graph了
5、設定入站出站packets 的SNMP監控
1、監控網路裝置:交換機、路由器的步驟:
-
把交換機、路由器的SNMP 把對應的OID的分支啟用起來
-
瞭解這些分支下有哪些OID,他們分別表示什麼意義
-
我們要監控的某一資料:如交換機的某一個介面流量、報文,傳送、傳入傳出的報文數有多少個;傳入傳出的位元組數有多少個,把OID取出來,儲存
2、定義入站出站的item監控項
interface traffic packets(in)
interface traffic packets(out)
二、
1、介紹
Java虛擬機器(JVM)具有內建的外掛,使您能夠使用JMX監視和管理它。您還可以使用JMX監視工具化的應用程式。
1、配置設定介紹
1、zabbix-java-gateway主機設定
- 安裝 zabbix-java-gateway程式包,啟動服務;
[[email protected] ~]# yum -y install zabbix-java-gateway
2、zabbix-server端設定(需要重啟服務)
JavaGateway=172.16.0.70 #即 zabbix server IP地址
JavaGatewayPort=10052
StartJavaPollers=5 #監控項
3、tomcat主機設定
- 監控tomcat:
[[email protected] ~]# vim /etc/sysconfig/tomcat
CATALINA_OPTS="-Djava.rmi.server.hostname=TOMCAT_SERVER_IP -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" #啟用JVM介面,預設沒有啟用
jmx[object_name,attribute_name]
object name # 它代表MBean的物件名稱
attribute name - # 一個MBean屬性名稱,可選的複合資料欄位名稱以點分隔
示例:
jmx["java.lang:type=Memory","HeapMemoryUsage.used"
4、 jmx的詳細文件:https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
- 注意: 如果是手動安裝的tomcat 需要編輯 catalina.sh 檔案 ,重啟 tomcat
2、配置JVM介面監控
1、安裝配置 tomcat
1、下載安裝tomcat,主要是用JVM
[[email protected] ~]# yum -y install java-1.8.0-openjdk-devel tomcat-admin-webapps tomcat-docs-webapp
2、加CATALINA_OPTS= #啟用JVM介面,預設沒有啟用
[[email protected] ~]# vim /etc/sysconfig/tomcat
CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.30.2 -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
3、開啟服務
[[email protected] ~]# systemctl start tomcat
2、在 zabbix-server 端安裝配置 java-gateway
1、安裝配置 java-gateway
[[email protected] ~]# yum -y install zabbix-java-gateway
[[email protected] ~]# vim /etc/zabbix/zabbix_java_gateway.conf # 安裝完後,會生成一個java_gateway 的配置檔案
LISTEN_IP="0.0.0.0" #監聽伺服器地址
LISTEN_PORT=10052 #監聽zabbix_java程序的埠,預設是10052
PID_FILE="/tmp/zabbix_java.pid" #zabbix_java的pid路徑
START_POLLERS=5 #zabbix_java的程序數
TIMEOUT=10 #zabbix_java的超時時間
[[email protected] ~]# systemctl start zabbix-java-gateway.service # 可不用修改,直接開啟服務
2、修改 server 配置開啟 java-gateway 的配置
[[email protected] ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.30.107
JavaGatewayPort=10052
StartJavaPollers=5 # 開啟5個監控項
3、 重啟zabbix-server 服務
[[email protected] ~]# systemctl restart zabbix-server
3、在node2 主機上新增JMX介面,實驗模板
1、新增JMX介面
2、在 node2 上連線 tomcat JMX 模板
3、隨便檢視一個監控項 item
4、自己定義一個堆記憶體使用的監控項,基於JVM介面(沒必要,使用模板就好)
三、Zabbix 分散式監控
1、介紹
分散式監控概述:proxy and node
1、Zabbix 的三種架構
-
Server-agent
-
Server-Node-agent
-
Server-Proxy-agent
2、配置介紹
Zabbix Proxy的配置:
-
server-node-agent
-
server-proxy-agent
1、配置proxy主機
1、安裝程式包
zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
2、準備資料庫
建立、授權使用者、匯入schema.sql;
3、修改配置檔案
Server= zabbix server # 主機地址;
Hostname= # 當前代理伺服器的名稱;在server新增proxy時,必須使用此處指定的名稱;需要事先確保server能解析此名稱;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10 # proxy被動模式下,server多少秒同步配置檔案至proxy。該引數僅用於被動模式下的代理。範圍是1-3600*24*7
DataSenderFrequency=1 #代理將每N秒將收集的資料傳送到伺服器。 對於被動模式下的代理,該引數將被忽略。範圍是1-3600
4、在 server 端新增此 Porxy
Administration --> Proxies
5、在Server端配置通過此Proxy監控的主機;
注意:zabbix agent 端要允許 zabbix proxy 主機執行資料採集操作:
2、實現分散式 zabbix proxy 監控
1、實驗前準備
-
ntpdate 172.168.30.1 同步時間
-
關閉防火牆,selinux
-
設定主機名 hostnamectl set-hostname zbproxy.qfedu.com
-
vim /etc/hosts 每個機器都設定hosts,以解析主機名;DNS也行
2、環境配置(4臺主機)
機器名稱 | IP配置 | 服務角色 |
---|---|---|
zabbix-server | 192.168.30.107 | 監控 |
agent-node1 | 192.168.30.7 | 被監控端 |
agent-node2 | 192.168.30.2 | 被監控端 |
node3 | 192.168.30.3 | 代理proxy |
zabbix-server 直接監控一臺主機 node1
zabbix-server 通過代理 node3 監控 node2
3、在 node3 上配置 mysql
1、建立配置 mysql
1、建立 mariadb.repo
[root@node3 ~]# vim /etc/yum.repos.d/mariadb.repo
寫入以下內容:
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
2、yum 安裝最新版本 mariadb
[root@node3 ~]# yum install -y MariaDB-server MariaDB-clien
- 修改配置檔案
[root@node3 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve = ON # 跳過主機名解析
innodb_file_per_table = ON # 開啟獨立表空間
innodb_buffer_pool_size = 256M # 快取池大小
max_connections = 2000 # 最大連線數
log-bin = master-log # 開啟二進位制日誌
3、重啟我們的資料庫服務
[root@node3 ~]# systemctl restart mariadb
[root@node3 ~]# mysql_secure_installation # 初始化mariadb
4、建立資料庫 和 授權使用者
MariaDB [(none)]> create database zbxproxydb character set 'utf8';
MariaDB [(none)]> grant all on zbxproxydb.* to 'zbxproxyuser'@'192.168.30.%' identified by 'zbxproxypass';
MariaDB [(none)]> flush privileges;
3、在node3 上下載zabbix 相關的包,主要是代理proxy的包
[root@node3 ~]# yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
1、初始化資料庫
zabbix-proxy-mysql 包裡帶有,匯入資料的檔案
[root@node3 ~]# cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ 複製
[root@node3 ~]# gzip -d schema.sql.gz 解包
[root@node3 ~]# mysql -root -p zbxproxydb < schema.sql 匯入資料
2、檢視資料已經生成
4、配置 proxy 端
[root@node3 ~]# vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.30.107 # server 的IP
ServerPort=10051 # server 的埠
Hostname=zbxproxy.qfedu.com # 主機名
ListenPort=10051 # proxy自己的監聽埠
EnableRemoteCommands=1 # 允許遠端命令
LogRemoteCommands=1 # 記錄遠端命令的日誌
# 資料的配置
DBHost=192.168.30.3
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=zbxproxypass
ConfigFrequency=30 # 多長時間,去服務端拖一次有自己監控的操作配置;為了實驗更快的生效,這裡設定30秒,預設3600s
DataSenderFrequency=1 # 每一秒向server 端發一次資料,傳送頻度
2、開啟服務
[root@node3 ~]# systemctl start zabbix-proxy
5、配置node2端允許proxy代理監控
[root@node3 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.30.107,192.168.30.3
ServerActive=192.168.30.107,192.168.30.3
[root@node3 ~]# systemctl restart zabbix-agent # 啟動服務
6、把代理加入監控 server 建立配置agent 代理
1、建立agent 代理
2、配置
7、建立node2 主機並採用代理監控
- 設定代理成功
8、建立item監控項
1、隨便創一個監控項 CPU Switches
2、程序裡設定每秒更改
3、成功graph 圖形生成
四、
1、官方的 share 分享網站
https://share.zabbix.com/zabbix-tools-and-utilities
- 例如:我們要實現監控Nginx ,我們查詢一個模板
- 就以這個模板為例
2、在node1 上使用此模板
1、安裝配置 nginx
[root@node1 ~]# yum -y install nginx
[root@node1 ~]# vim /etc/nginx/nginx.conf # 按照網頁的操作指示
location /stub_status {
stub_status on;
access_log off;
# allow 127.0.0.1; #為了操作方便,我取消的訪問控制
# deny all;
}
2、啟動服務
[root@node1 ~]# systemctl restart nginx
2、下載模板所依賴的指令碼
[root@node1 ~]# mkdir -p /srv/zabbix/libexec/
[root@node1 ~]# cd /srv/zabbix/libexec/
[root@node1 ~]# wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/nginx.sh # 從網頁上獲取指令碼
[root@node1 ~]# chmod +x nginx.sh # 加執行許可權
3、配置 agent 的使用者引數 UserParameter
[root@node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@node1 ~]# wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/userparameter_nginx.conf # 很短自己寫也行
4、在 windows 上下載模板並匯入server 的模板中
[root@node1 ~]# wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/zbx_export_templates.xml
可以現在linux上下載,再sz 匯出到 windows 上
1、匯入下載的模板
2、主機 node1 連結這個模板
3、模板生效
五、Zabbix-server 監控自己,資料庫,nginx
1、下載安裝配置agent
[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 允許遠端命令
LogRemoteCommands=1 記錄遠端命令
Server=127.0.0.1 #建議真實ip地址
ServerActive=127.0.0.1
Hostname=server.qfedu.com
2、自動生成 Zabbix server 的主機
3、在主機中新增模板
4、啟用Zabbix server
5、監控到資料
zabbix_agent 客戶端操作
1、mysql 建立 zabbix 賬號連線本地mysql
mysql> GRANT ALL ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
mysql> FLUSH PRIVILEGES;
2、在 zabbix_agentd 建立 .my.cnf (使用者名稱密碼登入配置檔案)
[[email protected] ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf # 獲取登入配置檔案建立路徑
[[email protected] ~]# mkdir -p /var/lib/zabbix
# 在/var/lib/zabbix下建立(隱藏).my.cnf
[[email protected] ~]# cat ./.my.cnf
[client]
user=zabbix
password=zabbix
六、
1、申請企業微信
1、填寫註冊資訊
2、配置微信企業號
1、建立告警組,然後把接受訊息人加進來
2、記錄賬號名稱,等下填寫接收人資訊需要用到
3、點選我的企業,檢視企業資訊,要記錄企業CorpID
4、點選企業應用,建立應用
5、填寫資訊和通知使用者組
6、建立完,記錄Agentld和Secret
3、配置zabbix伺服器
1、首先確認已經記錄的資訊
告警組使用者的賬號,企業CorpID和建立應用的Secret、Agentld
2、修改zabbix.conf
[[email protected] ~]# grep alertscripts /etc/zabbix/zabbix_server.conf
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
我們設定zabbix預設指令碼路徑,這樣在web端就可以獲取到指令碼
3、下載並設定指令碼
[[email protected] ~]# cd /usr/lib/zabbix/alertscripts/
[[email protected] alertscripts]# wget https://raw.githubusercontent.com/OneOaaS/weixin-alert/master/weixin_linux_amd64
[[email protected] alertscripts]# mv weixin_linux_amd64 wechat
[[email protected] alertscripts]# chmod 755 wechat
[[email protected] alertscripts]# chown zabbix:zabbix wechat
4、執行指令碼進行測試
[[email protected] alertscripts]# ./wechat --corpid=xxx --corpsecret=xxx --msg="您好,告警測試" --user=使用者賬號 --agentid=xxx
{"errcode":0,"errmsg":"ok","invaliduser":""}
提示:
-corpid= 我們企業裡面的id
--corpsecret= 這裡就是我們Secret裡面的id
-msg= 內容
-user=我們邀請使用者的賬號
因為指令碼是編譯過的,無法進行編輯,我們可以使用 ./wechat -h or --help 檢視
4、zabbix web頁面配置告警資訊
1、管理-報警媒介型別-建立告警媒介
2、填寫報警媒介資訊
--corpid=我們企業裡面的id
--corpsecret=這裡就是我們Secret裡面的id
--agentid= Agentld ID
--user={ALERT.SENDTO}
--msg={ALERT.MESSAGE}
3、設定告警使用者
4、設定告警動作
1、動作資訊
2、填寫告警時候操作資訊
故障告警:{TRIGGER.STATUS}: {TRIGGER.NAME}
告警主機:{HOST.NAME}
主機地址:{HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件程式碼:{EVENT.ID}
3、填寫恢復操作資訊
故障解除:{TRIGGER.STATUS}: {TRIGGER.NAME}
恢復主機:{HOST.NAME}
主機地址:{HOST.IP}
恢復時間:{EVENT.DATE} {EVENT.TIME}
恢復等級:{TRIGGER.SEVERITY}
恢復資訊:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件程式碼:{EVENT.ID}
5、手動觸發告警,測試微信接收資訊
- 在agent端使用yum安裝一下redis:
[root@node1 ~]# yum install redis -y
- 修改配置檔案
[root@node1 ~]# vim /etc/redis.conf
bind 0.0.0.0 #不做任何認證操作
- 修改完成以後啟動服務並檢查埠:
[root@node1 ~]# systemctl start redis
[root@node1 ~]# ss -nutlp | grep redis
tcp LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=5250,fd=4))
1、定義監控項
- 進入 配置 ---> 主機 ---> node1 ---> 監控項(items)---> 建立監控項
- 填寫完畢以後點選下方的新增。
- 該監控項已成功新增。檢視一下他的值:檢測中 ---> 最新資料
2、定義觸發器
- 進入 配置 ---> 主機 ---> node1 ---> 觸發器(trigger)---> 建立觸發器
- 填寫完畢以後點選下方的新增
-
該觸發器已成功新增。檢視:監測中 ---> 最新資料
-
手動關閉 redis 服務來檢測:
[root@node1 ~]# systemctl stop redis.service
- 進入監測中 ---> 問題
- 已經顯示的是問題了。並且有持續的時間,當服務被開啟,會轉為已解決狀態:
[root@node1 ~]# systemctl start redis.service
6、微信客戶端檢測
七、Zabbix 調優
1、調優
1、Database:
-
歷史資料不要儲存太長時長;
-
儘量讓資料快取在資料庫伺服器的記憶體中;
2、觸發器表示式:
-
減少使用聚合函式min(), max(), avg();儘量使用last(),nodata(),因為聚合函式,要運算
-
資料收集:polling較慢(減少使用SNMP/agentless/agent);儘量使用trapping(agent(active)主動監控);
-
資料型別:文字型資料處理速度較慢;儘量少收集型別為文字 text或string型別的資料;多使用型別為numeric 數值型資料 的;
2、zabbix伺服器的程序
1、伺服器元件的數量;
-
alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
-
StartPollers=60
-
StartPingers=10
...
- StartDBSyncer=5
...
2、設定合理的快取大小
-
CacheSize=8M
-
HistoryCacheSize=16M
-
HistoryIndexCacheSize=4M
-
TrendCacheSize=4M
-
ValueCacheSize=4M
3、資料庫優化
分表:
history_*
trends*
events*
3、其它解決方案
-
grafana:展示
-
collectd:收集
-
influxdb:儲存
4、grafana+collectd+influxdb
5、prometheus:
-
exporter:收集
-
alertmanager:
-
grafana:展示
八、Zabbix監控實戰-Tomcat監控
1、方法一:開發java監控頁面
[[email protected] tomcat8_1]# cat /application/tomcat/webapps/memtest/meminfo.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory:"+tm+"MB"+"<br>");
out.println("Free memory:"+fm+"MB"+"<br>");
out.println("Available memory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
%>
2、方法二:使用jps命令進行監控
[[email protected] ~]# jps -lvm
31906 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_1/endorsed -Dcatalina.base=/application/tomcat8_1 -Dcatalina.home=/application/tomcat8_1 -Djava.io.tmpdir=/application/tomcat8_1/temp
31812 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp
31932 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_2/endorsed -Dcatalina.base=/application/tomcat8_2 -Dcatalina.home=/application/tomcat8_2 -Djava.io.tmpdir=/application/tomcat8_2/temp
32079 sun.tools.jps.Jps -lvm -Denv.class.path=.:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m
3、Tomcat 遠端監控功能
1、修改配置檔案,開啟遠端監控
[[email protected] ~]# vim /application/tomcat8_1/bin/catalina.sh +97
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=10.0.0.17"
2、重啟服務,檢查12345埠是否開啟
[[email protected] ~]# /application/tomcat8_1/bin/shutdown.sh
[[email protected] ~]# /application/tomcat8_1/bin/startup.sh
[[email protected] ~]# netstat -tunlp|grep 12345
3、 檢查埠
[[email protected] ~]# netstat -tunlp|grep 12345
tcp6 0 0 :::12345 :::* LISTEN 33158/java
4、在windows上監控tomcat
注意:windwos需要安裝jdk環境!
查考:http://www.oracle.com/technetwork/java/javase/downloads/index.html
1、軟體路徑
C:\Program Files\Java\jdk1.8.0_31\bin
jconsole.exe jvisualvm.exe
2、jconsole.exe 使用說明
連線成功即可進行監控,連線的時候注意埠資訊。
3、jvisualvm.exe 使用說明
輸入ip地址
主機新增完成,新增JMX監控
注意新增的時候輸入埠資訊
新增完成後就能夠多tomcat程式進行監控。
4、zabbix 監控 tomcat 程式
1、zabbix 服務端安裝配置 java監控服務
[[email protected] ~]# yum install zabbix-java-gateway -y
2、檢視配置檔案
配置檔案路徑:/etc/zabbix/zabbix_java_gateway.conf
[[email protected] ~]# sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf
3、啟動zabbix-java-gateway服務,與zabbix服務
[[email protected] ~]# systemctl start zabbix-java-gateway.service
[[email protected] ~]# systemctl restart zabbix-server.service
4、檢查java埠是否開啟
[[email protected] ~]# netstat -lntup |grep java
tcp6 0 0 :::10052 :::* LISTEN 72971/java
5、檢查java程序是否存在
[[email protected] ~]# ps -ef |grep [j]ava
zabbix 72971 1 0 11:29 ? 00:00:00 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.13.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3 -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
zabbix 73255 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix 73256 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix 73257 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix 73258 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix 73259 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000004 sec, idle 5 sec]
6、web介面新增
1、新增主機
2、主機管理模板,注意是JMX模板
3、監控完成
5、排除 tomcat 故障步驟
1、檢視 catalina.out
2、使用 sh show-busy-java-threads.sh 指令碼進行檢測
#!/bin/bash
# @Function
# Find out the highest cpu consumed threads of java, and print the stack of these threads.
#
# @Usage
# $ ./show-busy-java-threads.sh
#
# @author Jerry Lee
readonly PROG=`basename $0`
readonly -a COMMAND_LINE=("$0" "$@")
usage() {
cat <<EOF
Usage: ${PROG} [OPTION]...
Find out the highest cpu consumed threads of java, and print the stack of these threads.
Example: ${PROG} -c 10
Options:
-p, --pid find out the highest cpu consumed threads from the specifed java process,
default from all java process.
-c, --count set the thread count to show, default is 5
-h, --help display this help and exit
EOF
exit $1
}
readonly ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "$@"`
[ $? -ne 0 ] && usage 1
eval set -- "${ARGS}"
while true; do
case "$1" in
-c|--count)
count="$2"
shift 2
;;
-p|--pid)
pid="$2"
shift 2
;;
-h|--help)
usage
;;
--)
shift
break
;;
esac
done
count=${count:-5}
redEcho() {
[ -c /dev/stdout ] && {
# if stdout is console, turn on color output.
echo -ne "\033[1;31m"
echo -n "$@"
echo -e "\033[0m"
} || echo "$@"
}
yellowEcho() {
[ -c /dev/stdout ] && {
# if stdout is console, turn on color output.
echo -ne "\033[1;33m"
echo -n "$@"
echo -e "\033[0m"
} || echo "$@"
}
blueEcho() {
[ -c /dev/stdout ] && {
# if stdout is console, turn on color output.
echo -ne "\033[1;36m"
echo -n "$@"
echo -e "\033[0m"
} || echo "$@"
}
# Check the existence of jstack command!
if ! which jstack &> /dev/null; then
[ -z "$JAVA_HOME" ] && {
redEcho "Error: jstack not found on PATH!"
exit 1
}
! [ -f "$JAVA_HOME/bin/jstack" ] && {
redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack file does NOT exists!"
exit 1
}
! [ -x "$JAVA_HOME/bin/jstack" ] && {
redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack is NOT executalbe!"
exit 1
}
export PATH="$JAVA_HOME/bin:$PATH"
fi
readonly uuid=`date +%s`_${RANDOM}_$$
cleanupWhenExit() {
rm /tmp/${uuid}_* &> /dev/null
}
trap "cleanupWhenExit" EXIT
printStackOfThread() {
local line
local count=1
while IFS=" " read -a line ; do
local pid=${line[0]}
local threadId=${line[1]}
local threadId0x=`printf %x ${threadId}`
local user=${line[2]}
local pcpu=${line[4]}
local jstackFile=/tmp/${uuid}_${pid}
[ ! -f "${jstackFile}" ] && {
{
if [ "${user}" == "${USER}" ]; then
jstack ${pid} > ${jstackFile}
else
if [ $UID == 0 ]; then
sudo -u ${user} jstack ${pid} > ${jstackFile}
else
redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})."
redEcho "User of java process($user) is not current user($USER), need sudo to run again:"
yellowEcho " sudo ${COMMAND_LINE[@]}"
echo
continue
fi
fi
} || {
redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user})."
echo
rm ${jstackFile}
continue
}
}
blueEcho "[$((count++))] Busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) stack of java process(${pid}) under user(${user}):"
sed "/nid=0x${threadId0x} /,/^$/p" -n ${jstackFile}
done
}
ps -Leo pid,lwp,user,comm,pcpu --no-headers | {
[ -z "${pid}" ] &&
awk '$4=="java"{print $0}' ||
awk -v "pid=${pid}" '$1==pid,$4=="java"{print $0}'
} | sort -k5 -r -n | head --lines "${count}" | printStackOfThread
九、zabbix 監控 php-fpm
zabbix監控php-fpm主要是通過nginx配置php-fpm的狀態輸出頁面,在正則取值.要nginx能輸出php-fpm的狀態首先要先修改php-fpm的配置,沒有開啟nginx是沒有法輸出php-fpm status。
1、修改檔案php-fpm
vim /application/php-5.5.32/etc/php-fpm.conf檔案
2、修改nginx配置檔案
vim /application/nginx/conf/extra/www.conf,在server 區塊下新增一行內容
重啟nginx
3、curl 127.0.0.1/php_status 我們可以看到php-fpm 的狀態資訊
欄位 | 含義 |
---|---|
pool | php-fpm pool的名稱,大多數情況下為www |
process manager | 程序管理方式,現今大多都為dynamic,不要使用static |
start time | php-fpm上次啟動的時間 |
start since | php-fpm已運行了多少秒 |
accepted conn | pool接收到的請求數 |
listen queue | 處於等待狀態中的連線數,如果不為0,需要增加php-fpm程序數 |
max listen queue | php-fpm啟動到現在處於等待連線的最大數量 |
listen queue len | 處於等待連線佇列的套接字大小 |
idle processes | 處於空閒狀態的程序數 |
active processes | 處於活動狀態的程序數 |
total processess | 程序總數 |
max active process | 從php-fpm啟動到現在最多有幾個程序處於活動狀態 |
max children reached | 當pm試圖啟動更多的children程序時,卻達到了程序數的限制,達到一次記錄一次,如果不為0,需要增加php-fpm pool程序的最大數 |
slow requests | 當啟用了php-fpm slow-log功能時,如果出現php-fpm慢請求這個計數器會增加,一般不當的Mysql查詢會觸發這個值 |
4、編寫監控指令碼和監控檔案
vim /server/scripts/php_fpm-status.sh
#!/bin/sh
#php-fpm status
case $1 in
ping) #檢測php-fpm程序是否存在
/sbin/pidof php-fpm | wc -l
;;
start_since) #提取status中的start since數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==4{print $3}'
;;
conn) #提取status中的accepted conn數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==5{print $3}'
;;
listen_queue) #提取status中的listen queue數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==6{print $3}'
;;
max_listen_queue) #提取status中的max listen queue數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==7{print $4}'
;;
listen_queue_len) #提取status中的listen queue len
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==8{print $4}'
;;
idle_processes) #提取status中的idle processes數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==9{print $3}'
;;
active_processes) #提取status中的active processes數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==10{print $3}'
;;
total_processes) #提取status中的total processess數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==11{print $3}'
;;
max_active_processes) #提取status中的max active processes數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==12{print $4}'
;;
max_children_reached) #提取status中的max children reached數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==13{print $4}'
;;
slow_requests) #提取status中的slow requests數值
/usr/bin/curl 127.0.0.1/php_status 2>/dev/null | awk 'NR==14{print $3}'
;;
*)
echo "Usage: $0 {conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processess|total_processes|max_active_processes|max_children_reached|slow_requests}"
exit 1
;;
esac
vim /etc/zabbix/zabbix_agentd.d/test.conf
UserParameter=php_status[*],/bin/sh /server/scripts/php_fpm-status.sh $1
5、重啟服務
在服務端測試
6、在web端進行配置
這時候我們再來看最新監控資料,就可以看到我們監控的內容了
配置到這,我們PHP狀態監控基本完成,根據需求配置相應的觸發器,即可。
你要的模板
連結: https://pan.baidu.com/s/1z0IU82uGId-LH1EryyuwCw 提取碼: q6n9
十、zabbix 監控 mysql
1、監控規劃
在建立監控項之前要儘量考慮清楚要監控什麼,怎麼監控,監控資料如何儲存,監控資料如何展現,如何處理報警等。要進行監控的系統規劃需要對Zabbix很瞭解,這裡只是提出監控的需求。
需求一:監控MySQL的狀態,當狀態發生異常,發出報警;
需求二:監控MySQL的操作,並用圖表展現;
2、自定義指令碼監控擴充套件Agent
Zabbix Server與Agent之間監控資料的採集主要是通過Zabbix Server主動向Agent詢問某個Key的值,Agent會根據Key去呼叫相應的函式去獲取這個值並返回給Server端。Zabbix 2.4.7的Agent本並沒有內建MySQL的監控功能(但是Server端提供了相應的Template配置),所以我們需要使用Zabbix的User Parameters功能,為MySQL新增監控指令碼。
3、授權mysql登入使用者(agent端)
mysql> grant usage on *.* to [email protected] identified by 'zabbix';
mysql> flush privileges;
4、agent端配置
存活檢測
利用UserParameter引數自定義Agent Key。
對於需求一 ,我們採用mysqladmin這個工具來實現,命令如下:
mysqladmin -h 127.0.0.1 -u zabbix -pzabbix ping
#mysqld is alive
如果MySQL狀態正常,會顯示mysqld is alive,否則會提示連線不上。對於伺服器端,mysqld is alive這樣的句子不好理解,伺服器端最好只接收1和0,1表示服務可用,0表示服務不可用。那麼再改進一下這個命令,如下:
mysqladmin -h 127.0.0.1 -u zabbix -pzabbix ping |grep -c alive
#1
使用者名稱和密碼放在命令中對於以後的維護不好,所以我們在/var/lib/zabbix/下建立一個包含MySQL使用者名稱和密碼的配置檔案“.my.cnf”,如下:
mkdir -p /var/lib/zabbix/
vim /var/lib/zabbix/.my.cnf
[mysql]
host=localhost
user=zabbix
password=zabbix
socket=/var/lib/mysql/mysql.sock
[mysqladmin]
host=localhost
user=zabbix
password=zabbix
socket=/var/lib/mysql/mysql.sock
有了這個檔案後的命令變更為
HOME=/var/lib/zabbix/ mysqladmin ping |grep -c alive
1
做完這一步後需要做的就是,將這個監控命令新增到Zabbix Agent中,並與一個Key對應,這樣Zabbox Server就能通過這個Key獲取MySQL的狀態了。我們使用mysql.ping作為MySQL狀態的Key。
首先在去除/etc/zabbix/zabbix_agentd.conf中“Include=/etc/zabbix_agentd.d/” 這一行的註釋符(預設開啟,檢查一下)。
其次,修改/etc/zabbix/zabbix_agentd.d/目錄下userparameter_mysql.conf檔案。
#備份配置檔案
mv /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf.bak
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
#在檔案中新增如下命令
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
使用下面的命令測試是否正常工作。
/usr/sbin/zabbix_agentd -t mysql.ping
#mysql.ping [t|1]
其他效能指標
1.新增userparameter_mysql
監控mysql效能的指令碼
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
mysql版本
UserParameter=mysql.version,mysql -V
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
#新增下面2行內容
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
UserParameter=mysql.version,mysql -V
2.check_mysql.sh
建立監控指令碼(修改為自己的密碼和IP地址)
vim /etc/zabbix/zabbix_agentd.d/check_mysql.sh
#!/bin/bash
# -------------------------------------------------------------------------------
# FileName: check_mysql.sh
# Revision: 1.0
# -------------------------------------------------------------------------------
# Copyright:
# License: GPL
# 使用者名稱
MYSQL_USER='zabbix'
# 密碼
MYSQL_PWD='zabbix'
# 主機地址/IP
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
3.授權:
chmod +x /etc/zabbix/zabbix_agentd.d/check_mysql.sh
chown zabbix.zabbix /etc/zabbix/zabbix_agentd.d/check_mysql.sh
#重啟agent
systemctl restart zabbix-agent
4. zabbix_agent上測試:
zabbix_agentd -t mysql.ping
5.Zabbix_server測試
zabbix_get -s ip -P 埠 -k mysql.ping
5、在web端進行配置
**建立主機 **
關聯模板
建立監控項
建立圖形
檢視監控影象
其他監控項配置:
6、zabbix自帶mysql監控項
version:資料庫版本
key_buffer_size:myisam的索引buffer大小
sort_buffer_size:會話的排序空間(每個執行緒會申請一個)
join_buffer_size:這是為連結操作分配的最小快取大小,這些連線使用普通索引掃描、範圍掃描、或者連線不適用索引
max_connections:最大允許同時連線的數量
max_connect_errors:允許一個主機最多的錯誤連結次數,如果超過了就會拒絕之後連結(預設100)。可以使用flush hosts命令去解除拒絕
open_files_limits:作業系統允許mysql開啟的檔案數量,可以通過opened_tables狀態確定是否需要增大table_open_cache,如果opened_tables比較大且一直還在增大說明需要增大table_open_cache
max-heap_tables_size:建立的記憶體表的最大大小(預設16M)這個引數和tmp_table_size一起限制內部臨時表的最大值(取這兩個引數的小的一個),如果超過限制,則表會變為innodb或myisam引擎,(5.7.5之前是預設是myisam,5.7.6開始是innodb,可以通過internal_tmp_disk_storage_engine引數調整)。
max_allowed_packet:一個包的最大大小
##########GET INNODB INFO
#INNODB variables
innodb_version:
innodb_buffer_pool_instances:將innodb緩衝池分為指定的多個(預設為1)
innodb_buffer_pool_size:innodb緩衝池大小、5.7.5引入了innodb_buffer_pool_chunk_size,
innodb_doublewrite:是否開啟doublewrite(預設開啟)
innodb_read_io_threads:IO讀執行緒的數量
innodb_write_io_threads:IO寫執行緒的數量
########innodb status
innodb_buffer_pool_pages_total:innodb緩衝池頁的數量、大小等於innodb_buffer_pool_size/(16*1024)
innodb_buffer_pool_pages_data:innodb緩衝池中包含資料的頁的數量
########## GET MYSQL HITRATE
1、查詢快取命中率
如果Qcache_hits+Com_select<>0則為 Qcache_hits/(Qcache_hits+Com_select),否則為0
2、執行緒快取命中率
如果Connections<>0,則為1-Threads_created/Connections,否則為0
3、myisam鍵快取命中率
如果Key_read_requests<>0,則為1-Key_reads/Key_read_requests,否則為0
4、myisam鍵快取寫命中率
如果Key_write_requests<>0,則為1-Key_writes/Key_write_requests,否則為0
5、鍵塊使用率
如果Key_blocks_used+Key_blocks_unused<>0,則Key_blocks_used/(Key_blocks_used+Key_blocks_unused),否則為0
6、建立磁碟儲存的臨時表比率
如果Created_tmp_disk_tables+Created_tmp_tables<>0,則Created_tmp_disk_tables/(Created_tmp_disk_tables+Created_tmp_tables),否則為0
7、連線使用率
如果max_connections<>0,則threads_connected/max_connections,否則為0
8、開啟檔案比率
如果open_files_limit<>0,則open_files/open_files_limit,否則為0
9、表快取使用率
如果table_open_cache<>0,則open_tables/table_open_cache,否則為0
十一、 zabbix其他常用自定義監控項
redis相關的自定義項
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/redis.conf
UserParameter=Redis.Status,/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 ping |grep -c PONG
UserParameter=Redis_conn[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "connected_clients" | awk -F':' '{print $2}'
UserParameter=Redis_rss_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_memory_rss" | awk -F':' '{print $2}'
UserParameter=Redis_lua_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_memory_lua" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_sys[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_sys" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_user[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_user" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_sys_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_sys_children" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_user_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_user_children" | awk -F':' '{print $2}'
UserParameter=Redis_keys_num[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "$$1" | grep -w "keys" | grep db$3 | awk -F'=' '{print $2}' | awk -F',' '{print $1}'
UserParameter=Redis_loading[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep loading | awk -F':' '{print $$2}'
Redis.Status --檢測Redis執行狀態, 返回整數
Redis_conn --檢測Redis成功連線數,返回整數
Redis_rss_mem --檢測Redis系統分配記憶體,返回整數
Redis_lua_mem --檢測Redis引擎消耗記憶體,返回整數
Redis_cpu_sys --檢測Redis主程式核心CPU消耗率,返回整數
Redis_cpu_user --檢測Redis主程式使用者CPU消耗率,返回整數
Redis_cpu_sys_cline --檢測Redis後臺核心CPU消耗率,返回整數
Redis_cpu_user_cline --檢測Redis後臺使用者CPU消耗率,返回整數
Redis_keys_num --檢測庫鍵值數,返回整數
Redis_loding --檢測Redis持久化檔案狀態,返回整數
nginx相關的自定義項
vim /etc/nginx/conf.d/default.conf
location /nginx-status
{
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx.conf
UserParameter=Nginx.active,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/Active/ {print $NF}'
UserParameter=Nginx.read,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.wrie,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.wait,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $1}'
UserParameter=Nginx.handled,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $2}'
UserParameter=Nginx.requests,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $3}'
TCP相關的自定義項
vim /usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh
#!/bin/bash
function ESTAB {
/usr/sbin/ss -ant |awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
}
function LISTEN {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
}
$1
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/cattcp.conf
UserParameter=tcp[*],/usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh $1
tcp[TIMEWAIT] --檢測TCP的駐留數,返回整數
tcp[ESTAB] --檢測tcp的連線數、返回整數
tcp[LISTEN] --檢測TCP的監聽數,返回整數
系統監控常用自帶監控項
agent.ping 檢測客戶端可達性、返回nothing表示不可達。1表示可達
system.cpu.load --檢測cpu負載。返回浮點數
system.cpu.util -- 檢測cpu使用率。返回浮點數
vfs.dev.read -- 檢測硬碟讀取資料,返回是sps.ops.bps浮點型別,需要定義1024倍
vfs.dev.write -- 檢測硬碟寫入資料。返回是sps.ops.bps浮點型別,需要定義1024倍
net.if.out[br0] --檢測網絡卡流速、流出方向,時間間隔為60S
net-if-in[br0] --檢測網絡卡流速,流入方向(單位:位元組) 時間間隔60S
proc.num[] 目前系統中的程序總數,時間間隔60s
proc.num[,,run] 目前正在執行的程序總數,時間間隔60S
###處理器資訊
通過zabbix_get 獲取負載值
合理的控制使用者態、系統態、IO等待時間剋保證程序高效率的執行
系統態執行時間較高說明程序進行系統呼叫的次數比較多,一般的程式如果系統態執行時間佔用過高就需要優化程式,減少系統呼叫
io等待時間過高則表明硬碟的io效能差,如果是讀寫檔案比較頻繁、讀寫效率要求比較高,可以考慮更換硬碟,或者使用多磁碟做raid的方案
system.cpu.swtiches --cpu的程序上下文切換,單位sps,表示每秒取樣次數,api中引數history需指定為3
system.cpu.intr --cpu中斷數量、api中引數history需指定為3
system.cpu.load[percpu,avg1] --cpu每分鐘的負載值,按照核數做平均值(Processor load (1 min average per core)),api中引數history需指定為0
system.cpu.load[percpu,avg5] --cpu每5分鐘的負載值,按照核數做平均值(Processor load (5 min average per core)),api中引數history需指定為0
system.cpu.load[percpu,avg15] --cpu每5分鐘的負載值,按照核數做平均值(Processor load (15 min average per core)),api中引數history需指定為0
系統監控常用自定義監控項
####記憶體相關
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/catcarm.conf
UserParameter=ram.info[*],/bin/cat /proc/meminfo |awk '/^$1:{print $2}'
ram.info[Cached] --檢測記憶體的快取使用量、返回整數,需要定義1024倍
ram.info[MemFree] --檢測記憶體的空餘量,返回整數,需要定義1024倍
ram.info[Buffers] --檢測記憶體的使用量,返回整數,需要定義1024倍
####TCP相關的自定義項
vim /usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh
#!/bin/bash
function ESTAB {
/usr/sbin/ss -ant |awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
}
function LISTEN {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
}
$1
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/cattcp.conf
UserParameter=tcp[*],/usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh $1
tcp[TIMEWAIT] --檢測TCP的駐留數,返回整數
tcp[ESTAB] --檢測tcp的連線數、返回整數
tcp[LISTEN] --檢測TCP的監聽數,返回整數