無監控,不運維。好了,廢話不多說,下麵都是乾貨。 流量黨勿入,圖片太多!!! 項目實戰系列,總架構圖 http://www.cnblogs.com/along21/p/8000812.html 一、User parameters 用戶參數 1、介紹和用法 ① 介紹 自定義用戶參數,也就是自定義key ...
項目實戰系列,總架構圖 http://www.cnblogs.com/along21/p/8000812.html
一、User parameters 用戶參數
1、介紹和用法
有時,你可能想要運行一個代理檢查,而不是Zabbix的預定義
你可以編寫一個命令來檢索需要的數據,並將其包含在代理配置文件("UserParameter"配置參數)的用戶參數中
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、用法展示
① free | awk '/^Mem/{print $3}' 自己需要查找的參數的命令
cd /etc/zabbix/zabbix_agentd.d/
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
③ systemctl restart zabbix-agent.service 重啟agent 服務
zabbix_get -s 192.168.30.7 -p 10050 -k "memory.used"
3、用法升級
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}'
分析:$$2:表示不是前邊調位置參數的$2 ,而是awk 的參數$2
(2)在zabbix-server 端,查詢使用這個用戶參數的key
① 添加Memory Total 的item監控項,使用memory.stats[MemTotal] 的用戶參數
② clone 克隆Memory Total 創建Memory Free 的監控項
③ 創建Memory Buffers 的item 監控項,使用 memory.stats[Buffers] 的key
4、使用用戶參數監控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的狀態頁面匹配
location ~ \.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服務
① 查詢 curl 192.168.30.7/php-fpm-status
cd /etc/zabbix/zabbix_agentd.d/
UserParameter=php-fpm.stats[*],curl -s http://127.0.0.1/php-fpm-status | awk '/^$1/{print $$NF}'
分析:設置用戶參數為php-fpm.stats[*],$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監控項,使用定義的用戶參數
④ fpm.stats[max active processes]
③ php-fpm max active processes
/etc/zabbix/zabbix_agentd.d/php_status.conf
二、Network discovery 網路發現
1、介紹
網路發現:zabbix server掃描指定網路範圍內的主機;
網路發現是zabbix 最具特色的功能之一,它能夠根據用戶事先定義的規則自動添加監控的主機或服務等
加快Zabbix部署
簡化管理
可用服務(ftp, ssh, http, ...)
zabbix_agent的響應;
snmp_agent的響應;
(3)網路發現通常包含兩個階段:discovery發現 和actions動作
Zabbix定期掃描網路發現規則中定義的IP範圍;檢查的頻率對於每個規則都是可配置的
由網路發現模塊執行的服務和主機(IP)的每個檢查都會生成一個發現事件
② actions:網路發現中的事件可以觸發action,從而自動執行指定的操作,把discvery events當作前提條件;
Sending notifications 發送通知
Adding/removing hosts 添加/刪除主機
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 、狀態、上線/ 離線等進行配置
如果基於SNMP 檢測成功,則會創建SNMP 介面
如果某服務同時響應給了agent 和SNMP ,則兩種介面都會創建
如果同一種發現機制( 如agent) 返回了非惟一數據,則第一個介面被識別為預設,其它的為額外介面
即便是某主機開始時只有agent 介面,後來又通過snmp 發現了它,同樣會為其添加額外的snmp 介面
不同的主機如果返回了相同的數據,則第一個主機將被添加,餘下的主機會被當作第一個主機的額外介面
2、配置網路發現Network discovery
yum -y install zabbix-agent zabbix-sender
② 設置agent 配置,可以把之前設置好的node1的配置傳過來
vim /etc/zabbix/zabbix_agentd.conf
Hostname=node2.along.com #只需修改hostname
zabbix ALL=(ALL) NOPASSWD: ALL
① key:zabbix_get -s 192.168.30.2 -p 10050 -k "system.hostname"
② 更新間隔:1h就好,不要掃描太過頻繁,掃描整個網段,太廢資源;這裡為了實驗,設為1m
c) 配置action 完成,預設是disabled 停用的
(5)如果自己需要添加的主機已經掃描添加完成,就可以關閉網路掃描了,因為太耗資源
三、web監控
1、介紹
① Web監控:監控指定的站點的資源下載速度,及頁面響應時間,還有響應代碼;
web Scenario: web場景(站點)
web page :web頁面,一個場景有多個頁面
內建key:要測一個頁面,要測三個步驟(下邊3個內建key)
web.test.in[Scenario,Step,bps]:傳輸速率
web.test.time[Scenario,Step]: 響應時長
web.test.rspcode[Scenario,Step]:響應碼
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頁面
3、查看測試
四、主動/被動 監控
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";
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value 值
2、設置一個通過內建key發送數據的主動監控
ServerActive=192.168.30.107 給哪個監控server 發送數據 Hostname=node1.along.com 自己的主機名,假設主機定死了,不設置下一項 #HostnameItem= 如果自己的主機名易變動,這一項相當於key一樣去匹配
因為key:system.cpu.switches :上下文的數量進行切換,它返回一個整數值。為了監控效果,選擇下一秒減上一秒的值作為監控
3、設置一個通過命令zabbix_sender發送數據的主動監控
(1)配置一個zabbix traper(採集器) 的item 監控項
五、基於SNMP監控(瞭解)
1、介紹
三種通信方式:讀(get, getnext)、寫(set)、trap(陷阱);
161/udp
162/udp
v1: 1989
v2c: 1993
v3: 1998
MIB:Management Information Base 信息管理基礎
yum install net-snmp net-snmp-utils
/etc/snmp/snmpd.conf
systemctl start snmpd 被監控端開啟的服務
systemctl start snmptrapd 監控端開啟的服務(如果允許被監控端啟動主動監控時啟用)
① 定義認證符,將社區名稱"public"映射為"安全名稱"
1.1.0:系統描述信息,SysDesc
1.3.0:監控時間, SysUptime
1.5.0:主機名,SysName
1.7.0:主機提供的服務,SysService
2.1.0:網路介面數目
2.2.1.2:網路介面的描述信息
2.2.1.3:網路介面類型
……
# snmpget -v 2c -c public HOST OID
# snmpwalk -v 2c -c public HOST OID 通過這個埠查詢到的數據,全列出了
2、配置SNMP監控
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
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
(4)在node2上加一個 Template OS Linux SNMPv2 模板
3、設置入站出站packets 的SNMP監控
① 把交換機、路由器的SNMP 把對應的OID的分支啟用起來
③ 我們要監控的某一數據:如交換機的某一個介面流量、報文,發送、傳入傳出的報文數有多少個;傳入傳出的位元組數有多少個,把OID取出來,保存
interface traffic packets(out)
六、JMX介面
1、介紹
Java虛擬機(JVM)具有內置的插裝,使您能夠使用JMX監視和管理它。您還可以使用JMX監視工具化的應用程式。
安裝 zabbix-java-gateway程式包,啟動服務;
yum -y install zabbix-java-gateway
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介面監控
yum -y install java-1.8.0-openjdk-devel tomcat-admin-webapps tomcat-docs-webapp
② 加CATALINA_OPTS= #啟用JVM介面,預設沒有啟用
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"
(2)在zabbix-server 端,安裝配置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個監控項
③ systemctl restart zabbix-server 重啟zabbix-server 服務
(4)自己定義一個堆記憶體使用的監控項,基於JVM介面(沒必要,使用模板就好)
七、分散式監控
1、介紹
proxy and node
Server-agent
Server-Node-agent
Server-Proxy-agent
server-node-agent
server-proxy-agent
創建、授權用戶、導入schema.sql;
Server=
zabbix server主機地址;
Hostname=
當前代理伺服器的名稱;在server添加proxy時,必須使用此處指定的名稱;
=需要事先確保server能解析此名稱;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1
註意:zabbix agent端要允許zabbix proxy主機執行數據採集操作:
2、實現分散式zabbix proxy監控
③ 設置主機名 hostnamectl set-hostname zbproxy.along.com
④ vim /etc/hosts 每個機器都設置hosts,以解析主機名;DNS也行
192.168.30.107 server.along.com
192.168.30.3 node3.along.com zbproxy.along.com
機器名稱 |
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 通過代理node3 監控node2
[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
zabbix-proxy-mysql 包裡帶有,導入數據的文件
cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ 複製
mysql -root -p zbxproxydb < schema.sql 導入數據
① vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.30.107 #server 的IP ServerPort=10051 #server 的埠 Hostname=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 開啟服務
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 啟動服務
八、查詢使用網上模板監控
1、找官方的share 分享網站
https://cn.bing.com/ 搜索 zabbix share
2、在node1 上使用此模板
vim /etc/nginx/nginx.conf 按照網頁的操作指示
location /stub_status { stub_status on; access_log off; # allow 127.0.0.1; #為了操作方便,我取消的訪問控制 # deny all; }
wget https://raw.githubusercontent.com/oscm/zabbix/master/nginx/nginx.sh 從網頁上獲取腳本
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上
九、zabbix-server 監控自己,資料庫,nginx
1、下載安裝,配置agent
vim /etc/zabbix/zabbix_agentd.conf 配置agent
EnableRemoteCommands=1 允許遠程命令 LogRemoteCommands=1 記錄遠程命令 Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=server.along.com
2、自動生成Zabbix server 的主機
3、在主機中添加模板
4、啟用Zabbix server
5、監控到數據
十、調優
1、調優
歷史數據不要保存太長時長;
儘量讓數據緩存在資料庫伺服器的記憶體中;
② 觸發器表達式:減少使用聚合函數 min(), max(), avg();儘量使用last(),nodata();
因為聚合函數,要運算
③ 數據收集:polling較慢(減少使用SNMP/agentless/agent);儘量使用trapping(agent(active)主動監控);
④ 數據類型:文本型數據處理速度較慢;儘量少收集類型為文本 text或string類型的數據;多使用類型為numeric 數值型數據 的;
2、zabbix伺服器的進程
alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
StartPollers=60
StartPingers=10
...
StartDBSyncer=5
...
CacheSize=8M
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=4M
分表:
history_*
trends*
events*
3、其它解決方案
exporter:收集
alertmanager: