11月22日 Zabbix監(jiān)控系統(tǒng) 2

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 
QQ截圖20171122212719.png
注意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)建主機


image.png

創(chuàng)建模板


image.png

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

image.png

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


image.png

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ī)則


image.png

此時掃描到了要監(jiān)控的主機,并且處于up狀態(tài),但并沒有加入到監(jiān)控中,因為還沒有定義發(fā)現(xiàn)后的處理動作是什么


image.png

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

image.png

image.png

image.png

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)控如下


image.png

image.png

image.png

image.png

image.png

可以在此處查看監(jiān)控情況


image.png

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 
QQ截圖20171123112024.png
開放的監(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ù)


image.png

示例:使用snmp接口進行監(jiān)控


image.png

連接模板到此主機
image.png

示例自己定義一個item


image.png

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)控功能啟用了

image.png

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端。


image.png

示例

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)建代理


6854348-9ce04832ea987915.png

image.png

image.png

image.png

總結(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格式

image.png

image.png

image.png

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容