摘自:https://www.cnblogs.com/hgzero/p/14092120.html
Zabbix監控使用進階
1. Zabbix基於SNMP監控
1.1 zabbix-web所能指定的監控方式
ssh/telnet agent:master/agent SNMP:Simple Network Management Protocol IPMI:Intelligent Platform Management Interface 智慧平台管理接口 # 原本是一種Interl架構的企業系統的周邊設備所采用的一種工業標准 # IPMI也是一個開放的免費標准,使用者無需支付額外的費用即可使用此標准 JMX:Java Management eXtension (Java管理擴展) # 用於通過Java自己的接口對java程序進行監控 # 監控JVM虛擬機 # zabbix-java-gateway用於獲取監控數據 # 如果在服務器端定義Type為Trapper,那么客戶端可以向服務器端發送任意類型的數據 # 服務端收到把它保存下來就可以了
1.2 SNMP概述
1)snmp協議用途
SNMP:Simple Network Management Protocol 簡單網絡管理協議(非常古老的協議)
- 用於網絡管理的協議
- SNMP用於網絡設備的管理:交換機、路由器
版本:
- v1:1989
- v2c:1993
- v3:1998
2)snmp的組件
MIB:Management Information Base 管理信息庫(每一個agent都有一個MIB庫)
- 定義了所有可被管理對方的集合,而且還額外定義了被管理對象的名稱、訪問權限、數據類型等屬性
- 實現了能夠定義雙方可接受的監控組件以及監控組件中數據存儲格式的一個組件
- 還能實現將每一個被管理對象的ID (Object ID,OID)對應到名稱的轉換
MIB視圖:MIB庫的子集
- 授權:將某MIB視圖與某Community綁定來實現
SMI:MIB表示符號
SNMP協議本身
3)snmp通信方式
# NMS端 “讀”(get,getnext) 操作:管理員向設備獲取數據 “寫” (set)操作:管理員向設備執行設置操作 “Trap”(trap)操作:設備需要在重要狀況改變的時候,向管理員通報事件的發生 # Agent端 Response:返回一個或多個參數值
4)所使用的端口
- Agent:161/udp
- NMS:162/dup
5)工作模式
- NMS端向agent端采集數據(NMS表示監控節點)
- agent端向NMS端報告數據
- NMS請求agent修改配置
1.3 Linux上啟用snmp
# 安裝相關的程序包 yum install -y net-snmp net-snmp-utils net-snmp-libs # 定義配置文件 vim /etc/snmp/snmpd.conf # 為了方便,干脆就定義成 .1.3.6.1.2.1 ,把最后一個1去掉 # 啟動服務 systemctl start snmpd # 被監控端開啟的服務,監聽在 161/udp 上 systemctl start snmptrapd # 監控端開啟的服務(如果允許被監控端啟動主動監控時啟用)
1.4 snmp配置文件
1)配置文件概覽
- 將安全名稱映射到一個組名
2)OID(Object ID)
- 1.3.6.1.2.1
最后一個1才表示跟Internet相關,從這里開始定義一台主機的相關對象,具體有:
1:system # 1.3.6.1.2.1.1 2:interface # 1.3.6.1.2.1.2 4:ip # 1.3.6.1.2.1.4 6:tcp # 1.3.6.1.2.1.6 7:udp # 1.3.6.1.2.1.7
1.5 配置SNMP監控
1)配置並啟動snmp
# 修改配置文件 [root@c7_110 ~]# 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 # 如果不想定義這么多,為了方便,可以直接定義一個 .1.3.6.1.2.1 # 然后啟動snmp [root@c7_110 ~]# systemctl start snmpd
2)添加一個snmp接口並配置templates
2. Zabbix基於JMX監控
2.1 JMX概述
Java虛擬機(JVM)具有內置的插件,使得能夠使用JMX監視和管理它,還可以使用JMX監視工具化的應用程序
JMX(Java Management Extensions)Java管理擴展
2.2 JMX監控配置過程
1)zabbix-java-gateway主機設置
# 在某主機上(不一定要是在Zabbix_Server上)安裝zabbix-java-gateway程序包 yum install -y zabbix-java-gateway # 對zabbix-java-gateway進行配置,也可以不用配置,直接啟動 vim /etc/zabbix/zabbix_java_gateway.conf Listen_IP=10.0.0.110 # 監聽地址,可修改成0.0.0.0 Listen_PORT=10052 # 監聽zabbix_java進程的端口,默認是10052 TIMEOUT=10 # zabbix_java的超時時間 # 啟動zabbix-java-gateway systemctl start zabbix-java-gateway.service
2)配置zabbix-server訪問java-gateway
JavaGateway=10.0.0.110 #即 zabbix server IP地址 JavaGatewayPort=10052 StartJavaPollers=5 # 與啟動進程輪詢個數
# 配置完成之后需要重啟zabbix-server
3)開啟JMX遠程監控
vim /usr/local/tomcat/bin/catalina.sh # 如果是yum安裝的tomcat,要在/etc/sysconfig/tomcat中修改 #啟用JVM接口,默認沒有啟用 export CATALINA_OPTS=$CATALINA_OPTS "-Djava.rmi.server.hostname=10.0.0.110 -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" ### jmx[object_name,attribute_name] object name # 它代表MBean的對象名稱 attribute name - # 一個MBean屬性名稱,可選的復合數據字段名稱以點分隔 # 示例:jmx["java.lang:type=Memory","HeapMemoryUsage.used"] # 配置完成后需要重啟tomcat
4)在web上定義JMX監控
和SNMP相同,只需要定義一個JMX Interface即可,然后添加一個JMX的templates,其他操作完全相同
2.3 從外部導入Templates模板
- 搜索相關的監控模板:https://share.zabbix.com/
3. Zabbix分布式監控
3.1 分布式監控概述
1)Zabbix的三種架構
- Server-agent
- Server-Node-agent:使用節點(node)
- Server-Proxy-agent:使用代理(proxy)
zabbix能高效的監控分布式IT架構,在大型環境中zabbix提供兩種解決方案:proxy和node
2) Proxy or Node
代理(proxy)用於本區域數據搜集,並將數據發送給server
節點(node)提供完整的zabbix server用以建立分布式監控中的層級
3.2 使用節點(node)
節點(node)提供完整的Zabbix Server用以建立分布式監控中的層級
Node本身是一台server,它有有整的web頁面,完整的數據庫,它將數據源源不斷的傳送給Master
- 解決host過多時單台Server面臨性能瓶頸的問題
- 使用多個instance,每個instance是獨立的一套zabbix,有database和Frontent(optional)
- 支持熱插播,Node和Server的連接可以隨時斷開,但不影響Node的正常運行
- Node定時給Server發送configuration、history、event
- Server定時給Node發送configuration
- 所有配置變更只能在Node節點操作,不能在Server操作
- 支持樹狀結構,Node又可以是一個Server
3.3 使用代理(proxy)
代理(proxy)用於本區域數據手機,並將數據發送給server
Proxy只有一個proxy的daemon進程,Proxy也有自己的數據庫,但它的數據庫只會保存一定時間的數據,它與Master通信是將一批信息打包后發送到Master,Master將這些數據merge如Master數據庫
- Proxy不會向Server同步 configuration ,只會接收
- Proxy的數據庫定時會將數據傳送該Server,Proxy本地數據庫只保存最近沒有發送的數據
Master-Proxy相比Master-Node的優先:
- Proxy壓力小,數據庫只存儲一定時間數據
- Master壓力變小,數據不是源源不斷獲取,減小IO壓力
- 架構更清晰,易維護
3.4 Server-Proxy-agent配置示例
1)在proxy主機上安裝軟件包
yum install -y zabbix-proxy zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
2)為proxy創建一個數據庫並授權
# 創建數據庫 create database zabbix_proxy character set utf8; # 創建用戶並授權 grant all on zabbix_proxy.* to zbxuser@'10.0.%.%' identified by 'woshiniba' # 刷新權限 flush privileges
3)導入sql文件
- zabbix-proxy-mysql 包里面帶有
# 復制並解壓 cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ gzip -d schema.sql.gz # 導入數據,導入到剛剛建好的zabbix_proxy庫中 mysql -root -p zabbix_proxy < schema.sql
4)配置並啟用zabbix-proxy
### 配置zabbix-proxy vim /etc/zabbix/zabbix_proxy.conf Server=10.0.0.202 # server 的IP ServerPort=10051 # server 的端口 Hostname=zbxproxy.hgzero.com # 主機名 ListenPort=10051 # proxy自己的監聽端口 EnableRemoteCommands=1 # 允許遠程命令 LogRemoteCommands=1 # 記錄遠程命令的日志 # 數據的配置 DBHost=10.0.0.88 DBName=zabbix_proxy DBUser=zbxuser DBPassword=woshiniba ConfigFrequency=30 # 多長時間,去服務端拖一次有自己監控的操作配置;為了實驗更快的生效,這里設置30秒,默認3600s DataSenderFrequency=1 # 每一秒向server 端發一次數據,發送頻度 ### 啟動zabbix-proxy systemctl start zabbix-proxy
5)通過proxy代理的節點上操作
- 假設有一台節點node2,通過proxy代理
# 在node2的zabbix_agent配置文件中填入Zabbix Server和Proxy的地址 vim /etc/zabbix/zabbix_agentd.conf Server=10.0.0.88,10.0.0.202 ServerActive=10.0.0.88,10.0.0.202
6)在web上創建配置agent 代理
- 這個時候再創建Host時,就可以看到剛剛配置的proxy了,可以選擇是否通過proxy來監控
4. Zabbix通過微信發告警信息
4.1 注冊企業微信並配置
1)注冊企業微信
- 注冊成功后進入后台進行配置
2)添加告警組並添加成員
3)記錄企業ID
4)創建應用並
4.2 配置Zabbix Server
1)確認剛剛記錄的信息
告警組用戶的賬號、企業ID、創建應用的Secret、Agentld
2)下載消息推送腳本並測試
- 腳本地址:https://github.com/OneOaaS/weixin-alert
- 也可以選用其他腳本或者自行開發腳本
下載腳本后,將腳本保存在 /usr/lib/zabbix/alertscripts 后,修改權限及屬主屬組:
chmod 755 wechat chown zabbix.zabbix wechat
測試腳本:
[root@c7_node_02 alertscripts]# ./wechat --corpid=wwd43fee2ab4dbfb21 --corpsecret=pa2dgtdf8V0lFWwYaoG62345g_R39dodmK37RPJeOMOs --msg="現在在進行告警測試" --user=hgzerowzh --agentid=1000002 {"errcode":0,"errmsg":"ok","invaliduser":""} # 參數說明 -corpid= 我們企業里面的id --corpsecret= 這里就是我們Secret里面的id -msg= 內容 -user=我們邀請用戶的賬號
- 注意:腳本在安放完成之后,要重啟zabbix-server
3)在Zabbix Server上添加報警媒介
4)為對應的用戶添加報警媒介
5)創建Action
創建Action時,在“操作”中選擇 “Send Message”,並通過 “微信報警” 發送給用戶
# 操作信息內容 故障發生:{TRIGGER.NAME} 故障主機:{HOSTNAME1} IP地址:{HOST.CONN} 告警時間:{EVENT.DATE}{EVENT.TIME} 告警等級:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 告警項目:{TRIGGER.KEY1} 問題詳情:{ITEM.NAME} : {ITEM.VALUE} 當前狀態:{TRIGGER.STATUS} : {ITEM.VALUE1} 事件ID:{EVENT.ID} # 恢復操作信息內容 故障恢復:{HOSTNAME1} 已恢復! IP地址:{HOST.CONN} 告警時間:{EVENT.DATE}{EVENT.TIME} 告警等級:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 告警項目:{TRIGGER.KEY1} 問題詳情:{ITEM.NAME} : {ITEM.VALUE} 當前狀態:{TRIGGER.STATUS} : {ITEM.VALUE1} 事件ID:{EVENT.ID}
6)微信接受信息查看
主動觸發事件后,來查看微信是否能接受到信息
5. Zabbix調優相關
5.1 Zabbix調優
1)Database
歷史數據不要保存太長時長;
盡量讓數據緩存在數據庫服務器的內存中;
2)觸發器表達式
減少使用聚合函數min(), max(), avg();盡量使用last(),nodata(),因為聚合函數,要運算
數據收集:polling較慢(減少使用SNMP/agentless/agent);盡量使用trapping(agent(active)主動監控);
數據類型:文本型數據處理速度較慢;盡量少收集類型為文本 text或string類型的數據;多使用類型為numeric 數值型數據 的;
5.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*
5.3 其它解決方案
# 其他解決方案,grafana+collectd+influxdb grafana:展示 collectd:收集 influxdb:存儲 # prometheus exporter:收集 alertmanager: grafana:展示
本文作者: Praywu
本文鏈接:https://www.cnblogs.com/hgzero/p/14092120.html
版權聲明:本作品采用知識共享署名-非商業性使用-禁止演繹 2.5 中國大陸許可協議進行許可。