1、自定義key
接口:server端之所以能夠監(jiān)控agent端,是因為agent端有一個的接口,這個接口用于和server端連接,傳送監(jiān)控的數(shù)據(jù),所以一個主機要想被Zabbix監(jiān)控,首先要在本機安裝相應(yīng)的接口,接口類型有agent,snmp, jmx等,agent是絕大多數(shù)linux主機上都可以安裝的接口,snmp一般是安裝在路由器和交換機等網(wǎng)絡(luò)設(shè)備上使用的接口,jmx是java虛擬機安裝使用的接口,Zabbix監(jiān)控時可以與這三種接口進行連接,進而監(jiān)控不同的設(shè)備或主機。
自定義key:在zabbix agent端的配置文件上由用戶通過UserParameter指令定義的key,要監(jiān)控某一個主機的item,需要通過key在這個主機上獲取這個監(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)控的主機上安裝如下軟件包
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端控制本機在本地遠程執(zhí)行命令
LogRemoteCommands=1 #遠程執(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接口連接時打開的進程數(shù)
ServerActive=172.18.21.107 #主動模式下將監(jiān)控的數(shù)據(jù)主動發(fā)送給哪個遠程的server
Hostname=node4.magedu.com ---主動模式下要告訴server端主機的主機名,這樣server端才知道這是誰的數(shù)據(jù),進行存儲下來
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 #將此行注釋掉,默認為允許任務(wù)主機連接
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è)置為只允許本機訪問狀態(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)控上面兩
項,可以把active和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)建此主機,然后創(chuàng)建一個模板,在模板的item中添加上面的四項要監(jiān)控的內(nèi)容,使用自定義key,然后再將此模板鏈接到剛才創(chuàng)建的主機上。
創(chuàng)建主機

創(chuàng)建模板

在模板中加入要監(jiān)控的項目


將此模板鏈接到要監(jiān)控的主機

2、網(wǎng)絡(luò)發(fā)現(xiàn)
- 網(wǎng)絡(luò)發(fā)現(xiàn):zabbix server掃描指定網(wǎng)絡(luò)范圍內(nèi)的主機;
- 發(fā)現(xiàn)方式:ip地址范圍;可用服務(wù)(ftp, ssh, http, ...)
zabbix_agent的響應(yīng);
snmp_agent的響應(yīng); - 分兩個階段:
discovery
actions:把discvery events當作前提條件,發(fā)現(xiàn)后執(zhí)行的動作 - 可采取的動作:
send message, remote command
add/remove host
enable/disable host
add host to group
link template to host
示例
在要監(jiān)控的主機上安裝好zabbix-agent和zabbix-sender并啟動zabbix-agent服務(wù),這樣zabbix-server才能掃描到此主機,進而將其加到監(jiān)控里,使用如下key進行掃描主機
[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)控的主機,并且處于up狀態(tài),但并沒有加入到監(jiān)控中,因為還沒有定義發(fā)現(xiàn)后的處理動作是什么

定義發(fā)現(xiàn)后采用的動作




3、Web監(jiān)控
監(jiā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)碼
對某個主機的web頁面創(chuàng)建web監(jiān)控后會自動使用內(nèi)建的key進行三項指標的監(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端報告自己的主機名,這樣服務(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端主機名
-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)控路由器、交換機等不支持在監(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
實驗時使用的是linux主機,啟用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ù),本實驗采用的是被動模式,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:主機名,SysName
.1.3.6.1.2.1. 1.7.0:主機提供的服務(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接口進行監(jiān)控

連接模板到此主機

示例自己定義一個item

6、基于JMX的監(jiān)控
JMX接口主要用于監(jiān)控像tomcat這種運行于java虛擬機之上的服務(wù)。
示例:實現(xiàn)JMX監(jiān)控tomcat
1、在被監(jiān)控的主機上安裝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主機以及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),因為
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 #啟動的進程數(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的詳細文檔: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
7、Zabbix Proxy的配置
為了減輕zabbix-server端的壓力,常常需要配置多個proxy代理代替server端去監(jiān)控主機,并將結(jié)果反饋給server端,在proxy上數(shù)據(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 #因為要監(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主機的ip
Hostname=node3.magedu.com #指明自己的主機名,這樣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端在本機遠程執(zhí)行命令
LogRemoteCommands=1 #遠程執(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/
進入該網(wǎng)站,搜索nginx
選擇Nginx for Zabbix 3.2 會跳轉(zhuǎn)至github上的此網(wǎng)站:
https://github.com/oscm/zabbix/tree/master/nginx
根據(jù)此網(wǎng)站進行一步一步的配置即可
下載時用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ā)器表達式:減少使用min(), max(), avg()等聚合運算;盡量使用last(),nodata();
數(shù)據(jù)收集:polling較慢(減少使用SNMP/agentless/agent);盡量使用trapping(agent(active)),也就是盡量使用主動監(jiān)控模式;
數(shù)據(jù)類型:文本型數(shù)據(jù)處理速度較慢;盡量少收集類型為text或string類型的數(shù)據(jù);多使用類型為numeric的;
分表:將以下以打頭的表進行分表操作,存放在不同的服務(wù)器上
history_*
trends*
events* - zabbix服務(wù)器的進程:
(1) 服務(wù)器組件的數(shù)量;alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
StartPollers=60 #各種pollers就是監(jiā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è)有很好的實用性,大型企業(yè)使用比較重量型的監(jiān)控系統(tǒng),比如openfalcon
image.png






