1、自定義key
接口:server端之所以能夠監(jiān)控agent端,是因?yàn)閍gent端有一個的接口,這個接口用于和server端連接渣窜,傳送監(jiān)控的數(shù)據(jù),所以一個主機(jī)要想被Zabbix監(jiān)控焙格,首先要在本機(jī)安裝相應(yīng)的接口,接口類型有agent,snmp, jmx等夷都,agent是絕大多數(shù)linux主機(jī)上都可以安裝的接口眷唉,snmp一般是安裝在路由器和交換機(jī)等網(wǎng)絡(luò)設(shè)備上使用的接口,jmx是java虛擬機(jī)安裝使用的接口囤官,Zabbix監(jiān)控時可以與這三種接口進(jìn)行連接冬阳,進(jìn)而監(jiān)控不同的設(shè)備或主機(jī)。
自定義key:在zabbix agent端的配置文件上由用戶通過UserParameter指令定義的key党饮,要監(jiān)控某一個主機(jī)的item肝陪,需要通過key在這個主機(jī)上獲取這個監(jiān)控項。
vim zabbix_agentd.conf文件中
UserParameter=<key>,<shell,command>刑顺,key是自定義的key氯窍,可以隨便定義饲常,可以加參數(shù);逗號后面是得到要監(jiān)控的數(shù)據(jù)的命令或腳本狼讨。
示例:用自定義key監(jiān)控php-fpm的各狀態(tài)信息
1贝淤、在被監(jiān)控的主機(jī)上安裝如下軟件包
yum install nginx php-fpm zabbix-agent zabbix-sender -y
2、配置zabbix-agent并啟動服務(wù)
vim /etc/zabbix/zabbix_agentd.conf
LogFileSize=1 ---滾動日志
EnableRemoteCommands=1 #允許sever端控制本機(jī)在本地遠(yuǎn)程執(zhí)行命令
LogRemoteCommands=1 #遠(yuǎn)程執(zhí)行命令時記錄日志
Server=172.18.21.107 #被動模式下允許哪個server端過來采集監(jiān)控數(shù)據(jù)
ListenPort=10050 #被動模式下agent端監(jiān)聽的端口
ListenIP=0.0.0.0 #被動模式下監(jiān)聽的地址
StartAgents=5 #使用agent接口連接時打開的進(jìn)程數(shù)
ServerActive=172.18.21.107 #主動模式下將監(jiān)控的數(shù)據(jù)主動發(fā)送給哪個遠(yuǎn)程的server
Hostname=node4.magedu.com ---主動模式下要告訴server端主機(jī)的主機(jī)名政供,這樣server端才知道這是誰的數(shù)據(jù)播聪,進(jìn)行存儲下來
systemctl start zabbix-agent.service
3、配置php-fpm和nginx并啟動服務(wù)
vim /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
;listen.allowed_clients = 127.0.0.1 #將此行注釋掉布隔,默認(rèn)為允許任務(wù)主機(jī)連接
user = nginx
group = nginx
pm.status_path = /php-status #指明狀態(tài)頁的uri
ping.path = /ping
ping.response = pong
systemctl start php-fpm
vim /etc/nginx/conf.d/web.conf
server {
listen 80 default_server ;
server_name wwww.a.com;
root /app/website;
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /app/website$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^/(php-status|ping)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
# allow 127.0.0.1; #為了安全最好設(shè)置為只允許本機(jī)訪問狀態(tài)頁面离陶,這里為了測試方便,將此項和下面的一項注釋掉了
# deny all;
access_log off; #并且關(guān)閉訪問日志衅檀,不然每監(jiān)控一個狀態(tài)信息都會發(fā)送日志
}
}
mkdir /app/website -pv
vim /app/website/index.php
<?php
phpinfo();
?>
nginx -t
nginx #啟動服務(wù)
測試 http://172.18.21.200/index.php看是否連接php成功
http://172.18.21.200/php-status ---看能否看到php-fpm的狀態(tài)信息
[root@node4 website]#curl -s 172.18.21.200/php-status
pool: www
process manager: dynamic
start time: 22/Nov/2017:20:34:36 +0800
start since: 2117
accepted conn: 9
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
slow requests: 0
比如要監(jiān)控active processes招刨,可以通過這個命令獲
curl -s http://127.0.0.1/php-status|awk '/^active/{print $NF}'
要監(jiān)控total processes,可以通過如下命令獲得
curl -s http://127.0.0.1/php-status|awk '/^total/{print $NF}'
也可以把要監(jiān)控的項做為參數(shù)傳遞給這個命令或者腳本术吝,比如你要監(jiān)控上面兩
項计济,可以把a(bǔ)ctive和total做為參數(shù)傳遞給這個命令,就應(yīng)該寫成如下格式
curl -s http://127.0.0.1/php-status|awk '/^$1/{print $$NF}',$1表示傳給此命令
的第一個參數(shù)(active或total)排苍,$$NF這里用兩個$是為了說明為awk的內(nèi)建
變量而不是參數(shù)沦寂,比如你要打印第一列,要寫成$$1淘衙。
4传藏、自定義key
cd /etc/zabbix/zabbix_agentd.d/
vim php-fpm.conf
也可以加到主配置文件中vim /etc/zabbix/zabbix_agentd.conf
注意UserParameter的大小寫,不然服務(wù)重啟不成功
systemctl restart zabbix-agent
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[total]" ---在server端通過自定義的key手動獲取一個監(jiān)控數(shù)據(jù)彤守,發(fā)現(xiàn)獲取成功
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[active]"
1
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[max active]"
2
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[idle]"
4
5毯侦、訪問zabbix監(jiān)控的管理頁面http://172.18.21.107/zabbix/
創(chuàng)建此主機(jī),然后創(chuàng)建一個模板具垫,在模板的item中添加上面的四項要監(jiān)控的內(nèi)容侈离,使用自定義key,然后再將此模板鏈接到剛才創(chuàng)建的主機(jī)上筝蚕。
創(chuàng)建主機(jī)
創(chuàng)建模板
在模板中加入要監(jiān)控的項目
將此模板鏈接到要監(jiān)控的主機(jī)
2卦碾、網(wǎng)絡(luò)發(fā)現(xiàn)
- 網(wǎng)絡(luò)發(fā)現(xiàn):zabbix server掃描指定網(wǎng)絡(luò)范圍內(nèi)的主機(jī);
- 發(fā)現(xiàn)方式:ip地址范圍起宽;可用服務(wù)(ftp, ssh, http, ...)
zabbix_agent的響應(yīng)洲胖;
snmp_agent的響應(yīng); - 分兩個階段:
discovery
actions:把discvery events當(dāng)作前提條件坯沪,發(fā)現(xiàn)后執(zhí)行的動作 - 可采取的動作:
send message, remote command
add/remove host
enable/disable host
add host to group
link template to host
示例
在要監(jiān)控的主機(jī)上安裝好zabbix-agent和zabbix-sender并啟動zabbix-agent服務(wù)绿映,這樣zabbix-server才能掃描到此主機(jī),進(jìn)而將其加到監(jiān)控里,使用如下key進(jìn)行掃描主機(jī)
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "system.uname"
Linux node4.magedu.com 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64
定義發(fā)現(xiàn)規(guī)則
此時掃描到了要監(jiān)控的主機(jī)叉弦,并且處于up狀態(tài)丐一,但并沒有加入到監(jiān)控中,因?yàn)檫€沒有定義發(fā)現(xiàn)后的處理動作是什么
定義發(fā)現(xiàn)后采用的動作
3卸奉、Web監(jiān)控
監(jiān)控指定的站點(diǎn)的資源下載速度钝诚,及頁面響應(yīng)時間,還有響應(yīng)代碼榄棵;
內(nèi)建key:
web.test.in[Scenario,Step,bps]:傳輸速率
web.test.time[Scenario,Step]:響應(yīng)時長
web.test.rspcode[Scenario,Step]:響應(yīng)碼
對某個主機(jī)的web頁面創(chuàng)建web監(jiān)控后會自動使用內(nèi)建的key進(jìn)行三項指標(biāo)的監(jiān)控
如何創(chuàng)建web監(jiān)控如下
可以在此處查看監(jiān)控情況
4凝颇、主動和被動檢測
- 被動檢測:相對于agent而言;agent, server向agent請求獲取配置的各監(jiān)控項相關(guān)的數(shù)據(jù)疹鳄,agent接收請求拧略、獲取數(shù)據(jù)并響應(yīng)給server;
- 主動檢測:相對于agent而言瘪弓;agent(active),agent向server請求與自己相關(guān)監(jiān)控項配置垫蛆,主動地將server配置的監(jiān)控項相關(guān)的數(shù)據(jù)發(fā)送給server;
-
agent端所需要基本配置:
ServerActive= #主動監(jiān)控時server端的地址
Hostname= #主動監(jiān)控時agent端向server端報告自己的主機(jī)名腺怯,這樣服務(wù)器端才知道這是誰發(fā)過來的監(jiān)控數(shù)據(jù)
HostnameItem= #后面兩項如果同時啟用通常是第二項有效
配置完成后袱饭,如何添加主動監(jiān)控項如下圖
image.png
image.png -
zabbix_sender發(fā)送數(shù)據(jù):手動測試agent端向server端發(fā)送數(shù)據(jù),使用如下的命令呛占,這也是一種主動監(jiān)控的方式虑乖,只不過這種方式不是通過內(nèi)建的key主動向server端發(fā)送數(shù)據(jù),而是在agent端通過命令給server端發(fā)送數(shù)據(jù)晾虑,一般用于測試用
zabbix_sender命令的選項
-z zabbix_server_ip #指明server端的ip
-p zabbix_server_port #server端端口
-s zabbix_agent_hostname #agent端主機(jī)名
-k key #自己定義的kye
-o value #key的值
為了手動測試疹味,此時添加Item時要隨便定義一個不與其它已有key沖突的key,并且item type為“zabbix trapper"
image.png
image.png
在agent端發(fā)送一個數(shù)據(jù)測試一下
image.png
此時可以收到數(shù)據(jù)了
image.png
總結(jié):為了減輕server端的壓力帜篇,監(jiān)控時一般使用主動監(jiān)控模式糙捺,也就是agent端主動報告監(jiān)控數(shù)據(jù)給server端,會極大的提高server端的性能笙隙。
5洪灯、基于SNMP監(jiān)控
SNMP監(jiān)控主要用于監(jiān)控路由器、交換機(jī)等不支持在監(jiān)控端安裝agent接口的設(shè)備竟痰,此時只能使用簡單古老的協(xié)議SNMP協(xié)議的接口签钩。
監(jiān)聽端口是161/udp被監(jiān)控端;162/udp監(jiān)控端監(jiān)聽的端口凯亮,如果是主動模式
SNMP協(xié)議的版本:v1: 1989边臼,v2c: 1993哄尔,v3: 1998
實(shí)驗(yàn)時使用的是linux主機(jī)假消,啟用SNMP的方法如下
[root@node4 ~]#yum install net-snmp net-snmp-utils #在被監(jiān)控端安裝
[root@node4 ~]#rpm -ql net-snmp
/etc/snmp/snmpd.conf #被監(jiān)控端的配置文件
/etc/snmp/snmptrapd.conf #如果啟動的是主動模式,server端也
需要安裝此軟件包岭接,監(jiān)聽端口富拗,這樣被監(jiān)控端才能與之連接臼予,主
動發(fā)送數(shù)據(jù),此文件是主動監(jiān)控時server端的配置文件
/usr/lib/systemd/system/snmpd.service #被動監(jiān)控時被監(jiān)控端啟動的服務(wù)啃沪,監(jiān)聽的端口是161/udp
/usr/lib/systemd/system/snmptrapd.service #主動監(jiān)控時server端啟動的服務(wù)粘拾,監(jiān)聽的端口是162/udp
也就是說如果是主動監(jiān)控,server端也要安裝net-snmp和net-snmp-utils创千,并啟動snmptrapd.service服務(wù)缰雇,本實(shí)驗(yàn)采用的是被動模式,server端不需要安裝
vim /etc/snmp/snmpd.conf
開放的監(jiān)控項的含義
1.1.0:系統(tǒng)描述信息追驴,SysDesc
.1.3.6.1.2.1. 1.3.0:監(jiān)控時間械哟, SysUptime
.1.3.6.1.2.1. 1.5.0:主機(jī)名,SysName
.1.3.6.1.2.1. 1.7.0:主機(jī)提供的服務(wù)殿雪,SysService
.1.3.6.1.2.1. 2.1.0:網(wǎng)絡(luò)接口數(shù)目
.1.3.6.1.2.1. 2.2.1.2:網(wǎng)絡(luò)接口的描述信息
.1.3.6.1.2.1.2.2.1.3:網(wǎng)絡(luò)接口類型
[root@node4 snmp]#systemctl start snmpd
[root@node4 snmp]#ss -nlu
可以使用如下命令手動獲取監(jiān)控的數(shù)據(jù)
示例:使用snmp接口進(jìn)行監(jiān)控
連接模板到此主機(jī)
示例自己定義一個item
6暇咆、基于JMX的監(jiān)控
JMX接口主要用于監(jiān)控像tomcat這種運(yùn)行于java虛擬機(jī)之上的服務(wù)。
示例:實(shí)現(xiàn)JMX監(jiān)控tomcat
1丙曙、在被監(jiān)控的主機(jī)上安裝tomcat組件
[root@node3 ~]#yum install java-1.8.0-openjdk-devel tomcat tomcat-admin-webapps tomcat-webapps -y
[root@node3 ~]#vim /etc/sysconfig/tomcat #添加如下內(nèi)容爸业,指
明tomcat主機(jī)以及jmx監(jiān)聽的端口為12345,等待server端連接后
獲取監(jiān)控數(shù)據(jù)
CATALINA_OPTS="-Djava.rmi.server.hostname=172.18.21.7 -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"
2亏镰、在server端安裝zabbix-java-gateway
在server端除了要安裝zabbix組件外扯旷,還需要安裝java網(wǎng)關(guān),因?yàn)?zabbix不能直接和JMX接口連接拆挥,需要安裝java網(wǎng)關(guān)才可以
[root@node1 ~]#yum install zabbix-java-gateway
[root@node1 ~]#systemctl start zabbix-java-gateway.service
[root@node1 ~]#ss -nlt ---發(fā)現(xiàn)監(jiān)聽的端口是10052
3薄霜、修改zabbix-server端設(shè)置
[root@node1 ~]#vim /etc/zabbix/zabbix_server.conf
JavaGateway=172.18.21.107 #server端的ip地址
JavaGatewayPort=10052 #JavaGateway監(jiān)聽的端口
StartJavaPollers=5 #啟動的進(jìn)程數(shù)
[root@node1 ~]#systemctl restart zabbix-server.service #重新啟動服務(wù)
[root@node1 ~]#systemctl status zabbix-server.service #查看狀態(tài)是否啟用了java poller,說明java-gateway的監(jiān)控功能啟用了
jmx的詳細(xì)文檔: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
7纸兔、Zabbix Proxy的配置
為了減輕zabbix-server端的壓力惰瓜,常常需要配置多個proxy代理代替server端去監(jiān)控主機(jī),并將結(jié)果反饋給server端汉矿,在proxy上數(shù)據(jù)先短時的存入自己主機(jī)的mysql數(shù)據(jù)庫中崎坊,并不斷將監(jiān)控的數(shù)據(jù)發(fā)送至server端。
示例
1洲拇、在proxy上的配置
[root@node3 ~]#yum install mariadb-server
[root@node3 ~]#vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
innodb_buffer_pool_size = 256M
log_bin = bin-log
[root@node3 my.cnf.d]#systemctl start mariadb
MariaDB [(none)]> create database zbxproxydb character set 'utf8'; #創(chuàng)建一個數(shù)據(jù)庫
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zbxproxydb.* to zbxproxyuser@'172.18.21.7' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)
[root@node3 my.cnf.d]#yum install zabbix-proxy-mysql zabbix-get zabbix-sender zabbix-agent #因?yàn)橐O(jiān)控自己奈揍,所以安裝了zabbix-sender zabbix-agent
[root@node3 my.cnf.d]#rpm -ql zabbix-proxy-mysql
/usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz
[root@node3 my.cnf.d]#cd /usr/share/doc/zabbix-proxy-mysql-3.4.4/
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS ChangeLog COPYING NEWS README schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#zcat schema.sql.gz >schema.sql
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS ChangeLog COPYING NEWS README schema.sql schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#mysql -uzbxproxyuser -pcentos -h172.18.21.7 zbxproxydb < schema.sql #創(chuàng)建表
2、在proxy上修改的配置文件
[root@node3 zabbix-proxy-mysql-3.4.4]#vim /etc/zabbix/zabbix_proxy.conf
Server=172.18.21.107 #指明server主機(jī)的ip
Hostname=node3.magedu.com #指明自己的主機(jī)名赋续,這樣server端才能識別出這個代理
ServerPort=10051 #server監(jiān)聽的端口男翰,這里要根據(jù)server端真正
的監(jiān)聽端口而寫,并不一定是10051纽乱,如果是被動模式蛾绎,也就是
server端主動向proxy獲取數(shù)據(jù)時此項可以忽略,主動模式指的是
proxy主動發(fā)送監(jiān)控的數(shù)據(jù)給server端,一般都是主動模式租冠,以減
輕server端的壓力
EnableRemoteCommands=1#允許server端在本機(jī)遠(yuǎn)程執(zhí)行命令
LogRemoteCommands=1 #遠(yuǎn)程執(zhí)行命令時記錄到日志中
DBHost=172.18.21.7
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=centos
ConfigFrequency=30 #proxy主動獲取server端配置數(shù)據(jù)的時間間隔
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl start zabbix-proxy.service
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl status zabbix-proxy.service
3鹏倘、在agent端的配置
[root@node4 snmp]#vim /etc/zabbix/zabbix_agentd.conf
Server=172.18.21.7 #被動監(jiān)控下允許proxy過來采集數(shù)據(jù)
ServerActive=172.18.21.7#主動監(jiān)控下將數(shù)據(jù)發(fā)送給proxy顽爹,而不是server了
[root@node4 snmp]#systemctl restart zabbix-agent.service
創(chuàng)建代理
總結(jié):一般情況下proxy使用主動模式,也就是proxy主動將監(jiān)控的數(shù)據(jù)報告給server端,這樣就可以減輕server端的壓力稚矿,server端也不必主動去尋找proxy。
8昧识、如何通過官方提供的share.zabbix網(wǎng)站配置監(jiān)控nginx服務(wù)
zabbix官方提供的監(jiān)控各種服務(wù)該如何配置以及監(jiān)控項的模板的網(wǎng)站:https://share.zabbix.com/
進(jìn)入該網(wǎng)站跪楞,搜索nginx
選擇Nginx for Zabbix 3.2 會跳轉(zhuǎn)至github上的此網(wǎng)站:
https://github.com/oscm/zabbix/tree/master/nginx
根據(jù)此網(wǎng)站進(jìn)行一步一步的配置即可
下載時用wget命令下載raw格式
9褥影、zabbix調(diào)優(yōu)
- Database:
歷史數(shù)據(jù)不要保存太長時長校焦;
盡量讓數(shù)據(jù)緩存在數(shù)據(jù)庫服務(wù)器的內(nèi)存中寨典,這就要求根據(jù)物理內(nèi)存情況將數(shù)據(jù)庫的innodb_buffer_pool_size 設(shè)置的盡量大一些注暗;
觸發(fā)器表達(dá)式:減少使用min(), max(), avg()等聚合運(yùn)算;盡量使用last(),nodata()左胞;
數(shù)據(jù)收集:polling較慢(減少使用SNMP/agentless/agent);盡量使用trapping(agent(active))躺枕,也就是盡量使用主動監(jiān)控模式;
數(shù)據(jù)類型:文本型數(shù)據(jù)處理速度較慢叉瘩;盡量少收集類型為text或string類型的數(shù)據(jù)薇缅;多使用類型為numeric的;
分表:將以下以打頭的表進(jìn)行分表操作蓬痒,存放在不同的服務(wù)器上
history_*
trends*
events* - zabbix服務(wù)器的進(jìn)程:
(1) 服務(wù)器組件的數(shù)量;alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
StartPollers=60 #各種pollers就是監(jiān)控時啟動的進(jìn)程數(shù)
StartPingers=10
StartDBSyncer=5
(2) 設(shè)定合理的緩存大小
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M
總結(jié):zabbix是一種小型的輕量級的監(jiān)控系統(tǒng)亲轨,對于監(jiān)控中小型企業(yè)有很好的實(shí)用性器虾,大型企業(yè)使用比較重量型的監(jiān)控系統(tǒng),比如openfalcon
image.png