一、User parameters 使用者引數1、介紹和用法
① 介紹
自定義使用者引數,也就是自定義key
有時,你可能想要執行一個代理檢查,而不是Zabbix的預定義
你可以編寫一個命令來檢索需要的資料,並將其包含在代理配置檔案("UserParameter"配置引數)的使用者引數中
② 用法格式 syntax
UserParameter=<key>,<command> A user parameter also contains a key 一個使用者引數也包含一個鍵 The key will be necessary when configuring an item 在配置監控項時,key是必需的 Note: Need to restart the agent 注意:需要重新啟動agent 服務
2、用法展示(1)修改agent 端的配置,設定使用者引數
① free | awk '/^Mem/{print $3}' 自己需要查詢的引數的命令
② 修改配置檔案,把查詢引數的命令設為使用者引數
cd /etc/zabbix/zabbix_agentd.d/vim memory_usage.confUserParameter=memory.used,free | awk '/^Mem/{print $3}'
③ systemctl restart zabbix-agent.service 重啟agent 服務
(2)在zabbix-server 端,查詢
zabbix_get -s 192.168.30.7 -p 10050 -k "memory.used"
(3)在監控上,設定一個item監控項,使用這個使用者引數
(4)查詢graph 圖形
3、用法升級(1)修改agent 端的配置,設定使用者引數
① 命令列查詢引數的命令
② 修改配置檔案,把查詢引數的命令設為使用者引數
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^1/{print $2}'
分析:$$2:表示不是前邊調位置引數的2 ,而是awk 的引數2,而是awk的引數2
注意:$1是呼叫前邊的[*],位置引數,第一個引數
(2)在zabbix-server 端,查詢使用這個使用者引數的key
(3)在監控上,設定一個item監控項,使用這個使用者引數
① 新增Memory Total 的item監控項,使用memory.stats[MemTotal] 的使用者引數
在程序中定義倍數,規定單位
② clone 克隆Memory Total 建立Memory Free 的監控項
memory.stats[MemFree] 使用者引數
(4)上面3個監控項的graph 圖形
① memory total
② memory free
4、使用使用者引數監控php-fpm 服務的狀態在agent 端:
(1)下載,設定php-fpm
① yum -y install php-fpm
② vim /etc/php-fpm.d/www.conf 開啟php-fpm的狀態頁面
user = nginx group = nginx pm.status_path = /php-fpm-status #php-fpm 的狀態監測頁面 ping.path = /ping #ping 介面,存活狀態是否ok ping.response = pong #響應內容pong
③ systemctl start php-fpm 開啟服務
(2)設定nginx ,設定代理php,和php-fpm的狀態頁面匹配
vim /etc/nginx/nginx.conflocation ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* /(php-fpm-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; #因為這個頁面很重要,所有需加訪問控制 deny all; access_log off; #訪問這個頁面就不用記錄日誌了 }
② systemctl start nginx 開啟nginx服務
(3)在agent 端,設定使用者引數
① 查詢 curl 192.168.30.7/php-fpm-status
② 設定
cd /etc/zabbix/zabbix_agentd.d/vim php_status.confUserParameter=php-fpm.stats[*],curl -s http://127.0.0.1/php-fpm-status | awk '/^$1/{print $$NF}'
分析:設定使用者引數為php-fpm.stats[*],1為第一個引數;1為第一個引數;$NF為awk中的引數,倒數第一列
systemctl restart zabbix-agent
(4)在zabbix-server 端,查詢使用這個使用者引數的key
zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[idle]"zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[active]"zabbix_get -s 192.168.30.7 -p 10050 -k "php-fpm.stats[max active]"
(5)建立一個模板,在模板上建立4個item監控項,使用定義的使用者引數
① 建立一個模板
② 在模板上配置items 監控項,使用剛定義的使用者引數
fpm.stats[total processes]
fpm.stats[active processes]
④ fpm.stats[max active processes]
⑤ fpm.stats[idle processes]
(6)host主機連結模板
(7)檢視graph 圖形
① php-fpm total processes
② php-fpm active processes
④ php-fpm idle processes
(8)把模板匯出,可以給別人使用
① 匯出模板
最下面有匯出
② 自己定義使用者引數的檔案,也不要忘記匯出
/etc/zabbix/zabbix_agentd.d/php_status.conf
二、Network discovery 網路發現1、介紹(1)介紹
網路發現:zabbix server掃描指定網路範圍內的主機;
網路發現是zabbix 最具特色的功能之一,它能夠根據使用者事先定義的規則自動新增監控的主機或服務等
優點:
加快Zabbix部署
簡化管理
在快速變化的環境中使用Zabbix,而不需要過度管理
(2)發現方式:
ip地址範圍;
可用服務(ftp, ssh, http, ...)
zabbix_agent的響應;
snmp_agent的響應;
(3)網路發現通常包含兩個階段:discovery發現 和actions動作
① discovery:
Zabbix定期掃描網路發現規則中定義的IP範圍;檢查的頻率對於每個規則都是可配置的
每個規則都有一組用於為IP範圍執行的服務檢查
由網路發現模組執行的服務和主機(IP)的每個檢查都會生成一個發現事件
8種響應事件
② actions:網路發現中的事件可以觸發action,從而自動執行指定的操作,把discvery events當作前提條件;
Sending notifications 傳送通知
Enabling/disabling hosts 啟用/禁用host
Adding hosts to a group 向組中新增主機
Removing hosts from a group 移除組中的主機
Linking hosts to/unlinking from a template 從模板連結主機或取消連結
Executing remote scripts 執行遠端指令碼
這些事件的配置還可以基於裝置的型別、IP 、狀態、上線/ 離線等進行配置
(4)網路發現:介面新增
網路發現中新增主機時會自動建立interface 介面
例如:
如果基於SNMP 檢測成功,則會建立SNMP 介面
如果某服務同時響應給了agent 和SNMP ,則兩種介面都會建立
如果同一種發現機制( 如agent) 返回了非惟一資料,則第一個介面被識別為預設,其它的為額外介面
即便是某主機開始時只有agent 介面,後來又透過snmp 發現了它,同樣會為其新增額外的snmp 介面
不同的主機如果返回了相同的資料,則第一個主機將被新增,餘下的主機會被當作第一個主機的額外介面
2、配置網路發現Network discovery(1)準備一臺可被掃描發現的主機
① 安裝agent 段的包
yum -y install zabbix-agent zabbix-sender
② 設定agent 配置,可以把之前設定好的node1的配置傳過來
vim /etc/zabbix/zabbix_agentd.conf
Hostname=http://node2.along.com #只需修改hostname
Defaults !visiblepwzabbix ALL=(ALL) NOPASSWD: ALL
④ 開啟服務
systemctl start zabbix-agent
(2)設定自動發現規則discovery
註釋:
① key:zabbix_get -s 192.168.30.2 -p 10050 -k "system.hostname"
② 更新間隔:1h就好,不要掃描太過頻繁,掃描整個網段,太廢資源;這裡為了實驗,設為1m
(3)自動發現成功
(4)設定自動發現discovery 的動作action
a) 建立
b) 設定action動作
① 設定A條件,自動發現規則=http://test.net
② 設定B條件,自動發現狀態=up
新增主機到監控
自動連結Template OS Linux 到此host
c) 配置action 完成,預設是disabled 停用的
d) 啟用動作,檢視效果
確實已經生效,新增主機成功,模板連結成功
(5)如果自己需要新增的主機已經掃描新增完成,就可以關閉網路掃描了,因為太耗資源
三、web監控1、介紹(1)介紹
① Web監控:監控指定的站點的資源下載速度,及頁面響應時間,還有響應程式碼;
② 術語:
web Scenario: web場景(站點)
web page :web頁面,一個場景有多個頁面
內建key:要測一個頁面,要測三個步驟(下邊3個內建key)
http://web.test.in[Scenario,Step,bps]:傳輸速率
web.test.time[Scenario,Step]: 響應時長
web.test.rspcode[Scenario,Step]:響應碼
2、建立設定web場景(1)建立
(2)配置web 監測
a) 設定名為home page,URL為http://192.168.30.7/index.html 的web頁面
b) 設定名為fpm status,URL為http://192.168.30.7/fpm-status 的web頁面
c) 設定2個web頁面成功
② 如果有特殊認證,也可以新增
3、檢視測試四、主動/被動 監控1、介紹(1)主動/被動介紹
被動檢測:相對於agent而言;agent, server向agent請求獲取配置的各監控項相關的資料,agent接收請求、獲取資料並響應給server;
主動檢測:相對於agent而言;agent(active),agent向server請求與自己相關監控項配置,主動地將server配置的監控項相關的資料傳送給server;
主動監控能極大節約監控server 的資源。
(2)zabbix_sender傳送資料:實現人工生成資料,發給server端
① zabbix server上的某主機上,直接定義Item時隨便定義一個不與其它已有key衝突的key即可,即item type為"zabbix trapper";
② 用法選項:
zabbix_sender
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value 值
2、設定一個透過內建key傳送資料的主動監控(1)agent端所需要基本配置:
ServerActive=192.168.30.107 給哪個監控server 傳送資料 Hostname=http://node1.along.com 自己的主機名,假設主機定死了,不設定下一項 #HostnameItem= 如果自己的主機名易變動,這一項相當於key一樣去匹配
注意:若後兩項同時啟用,下邊一個選擇生效
(2)設定一個主動監測
① 選擇程序,每秒更改,
因為key:system.cpu.switches :上下文的數量進行切換,它返回一個整數值。為了監控效果,選擇下一秒減上一秒的值作為監控
(3)已經有啦graph圖形
3、設定一個透過命令zabbix_sender傳送資料的主動監控(1)配置一個zabbix traper(採集器) 的item 監控項
(2)agent 端手動傳送資料
(3)監控到資料的變化
五、基於SNMP監控(瞭解)1、介紹(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的方法:
yum install net-snmp net-snmp-utils
配置檔案:定義ACL
/etc/snmp/snmpd.conf
啟動服務:
systemctl start snmpd 被監控端開啟的服務
systemctl start snmptrapd 監控端開啟的服務(如果允許被監控端啟動主動監控時啟用)
(3)配置檔案的介紹
開放資料:4步
① 定義認證符,將社群名稱"public"對映為"安全名稱"
② 將安全名稱對映到一個組名
掩碼:我列出一些註釋,有很多,可以再網上查詢
.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:網路介面型別
……
④ 授予對systemview檢視的只讀訪問權
(4)測試工具:
snmpget -v 2c -c public HOST OIDsnmpwalk -v 2c -c public HOST OID 透過這個埠查詢到的資料,全列出了2、配置SNMP監控(1)下載,修改配置檔案
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 上測試
snmpget -v 2c -c public 192.168.30.2 .1.3.6.1.2.1.1.3.0
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了
3、設定入站出站packets 的SNMP監控(1)監控網路裝置:交換機、路由器的步驟:
① 把交換機、路由器的SNMP 把對應的OID的分支啟用起來
② 瞭解這些分支下有哪些OID,他們分別表示什麼意義
(2)定義入站出站的item監控項
interface traffic packets(in)
interface traffic packets(out)
六、JMX介面1、介紹(1)介紹
Java虛擬機器(JVM)具有內建的插裝,使您能夠使用JMX監視和管理它。您還可以使用JMX監視工具化的應用程式。
(2)配置設定介紹
① zabbix-java-gateway主機設定:
安裝 zabbix-java-gateway程式包,啟動服務;
yum -y install zabbix-java-gateway
② zabbix-server端設定(需要重啟服務):
JavaGateway=172.16.0.70
JavaGatewayPort=10052
StartJavaPollers=5 #監控項
監控tomcat:
/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"]
④ jmx的詳細文件:https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
2、配置JVM介面監控(1)安裝配置tomcat
① 下載安裝tomcat,主要是用JVM
yum -y install java-1.8.0-openjdk-devel tomcat-admin-webapps tomcat-docs-webapp
② 加CATALINA_OPTS= #啟用JVM介面,預設沒有啟用
vim /etc/sysconfig/tomcatCATALINA_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"
③ 開啟服務
systemctl start tomcat
(2)在zabbix-server 端,安裝配置java-gateway
① 安裝配置java-gateway
yum -y install zabbix-java-gateway
/etc/zabbix/zabbix_java_gateway.conf 安裝完後,會生成一個java_gateway 的配置檔案
systemctl start zabbix-java-gateway.service 不用修改,直接開啟服務
② 修改server 配置,開啟java-gateway的配置
vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.30.107 JavaGatewayPort=10052 StartJavaPollers=5 #開啟5個監控項
(3)在node2 主機上新增JMX介面,實驗模板
① 新增JMX介面
② 在node2 上連線tomcat JMX 模板
(4)自己定義一個堆記憶體使用的監控項,基於JVM介面(沒必要,使用模板就好)
七、分散式監控1、介紹(1)介紹
分散式監控概述
proxy and node
Zabbix 的三種架構
Server-agent
Server-Node-agent
Server-Proxy-agent
監控Zabbix
(2)配置介紹
Zabbix Proxy的配置:
server-node-agent
server-proxy-agent
a) 配置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
DataSenderFrequency=1
b) 在server端新增此Porxy
Administration --> Proxies
c) 在Server端配置透過此Proxy監控的主機;
注意:zabbix agent端要允許zabbix proxy主機執行資料採集操作:
2、實現分散式zabbix proxy監控實驗前準備:
① ntpdate 172.168.30.1 同步時間
② 關閉防火牆,selinux
④ vim /etc/hosts 每個機器都設定hosts,以解析主機名;DNS也行
192.168.30.107 http://server.along.com
192.168.30.7 http://node1.along.com
192.168.30.2 http://node2.along.com
192.168.30.3 http://node3.along.com http://zbproxy.along.com
(1)環境配置(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
(2)在node3 上配置mysql
① 建立配置mysql
vim /etc/my.cnf.d/server.cnf
[server] skip_name_resolve = on innodb_file_per_table = on innodb_buffer_pool_size = 256M max_connections = 2000 log-bin = master-log
② systemctl start mariadb 開啟服務
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的包
yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
a) 初始化資料庫
zabbix-proxy-mysql 包裡帶有,匯入資料的檔案
cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ 複製
gzip -d schema.sql.gz 解包
mysql -root -p zbxproxydb < schema.sql 匯入資料
b) 檢視資料已經生成
(4)配置proxy端
① vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.30.107 #server 的IP ServerPort=10051 #server 的埠 Hostname=http://zbxproxy.along.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 端發一次資料,傳送頻度
② systemctl start zabbix-proxy 開啟服務
(5)配置node2端,允許proxy代理監控
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.30.107,192.168.30.3 ServerActive=192.168.30.107,192.168.30.3
systemctl restart zabbix-agent 啟動服務
(6)把代理加入監控server,建立配置agent 代理
① 建立agent 代理
② 配置
(7)建立node2 主機,並採用代理監控
設定代理成功
(8)建立item監控項
① 為了實驗,隨便創一個監控項 CPU Switches
② 程序裡設定每秒更改
八、查詢使用網上模板監控1、找官方的share 分享網站https://cn.bing.com/ 搜尋 zabbix share
例如:我們要實現監控Nginx ,我們查詢一個模板
就以這個模板為例
2、在node1 上使用此模板(1)安裝配置 nginx
① yum -y install nginx
vim /etc/nginx/nginx.conf 按照網頁的操作指示
location /stub_status { stub_status on; access_log off; # allow 127.0.0.1; #為了操作方便,我取消的訪問控制 # deny all; }
② 啟動服務
systemctl restart nginx
(2)下載模板所依賴的指令碼
mkdir -p /srv/zabbix/libexec/
cd /srv/zabbix/libexec/
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/nginx.sh 從網頁上獲取指令碼
chmod +x nginx.sh 加執行許可權
(3)配置agent 的使用者引數UserParameter
cd /etc/zabbix/zabbix_agentd.d/
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/userparameter_nginx.conf 很短,自己寫也行
(4)在windows 上下載模板,並匯入這server 的模板中
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/zbx_export_templates.xml 可以現在linux上下載,再sz 匯出到windows上
① 匯入下載的模板
② 主機node1 連結這個模板
九、zabbix-server 監控自己,資料庫,nginx1、下載安裝,配置agentvim /etc/zabbix/zabbix_agentd.conf 配置agent
EnableRemoteCommands=1 允許遠端命令 LogRemoteCommands=1 記錄遠端命令 Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=http://server.along.com
2、自動生成Zabbix server 的主機3、在主機中新增模板4、啟用Zabbix server5、監控到資料十、調優1、調優① Database:
歷史資料不要儲存太長時長;
儘量讓資料快取在資料庫伺服器的記憶體中;
② 觸發器表示式:減少使用聚合函式 min(), max(), avg();儘量使用last(),nodata();
因為聚合函式,要運算
④ 資料型別:文字型資料處理速度較慢;儘量少收集型別為文字 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*