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)snmp協議用途java
SNMP:Simple Network Management Protocol 簡單網絡管理協議(很是古老的協議)node
版本:mysql
2)snmp的組件git
MIB:Management Information Base 管理信息庫(每個agent都有一個MIB庫)github
MIB視圖:MIB庫的子集web
SMI:MIB表示符號sql
SNMP協議自己數據庫
3)snmp通訊方式vim
# NMS端 「讀」(get,getnext) 操做:管理員向設備獲取數據 「寫」 (set)操做:管理員向設備執行設置操做 「Trap」(trap)操做:設備須要在重要情況改變的時候,向管理員通報事件的發生 # Agent端 Response:返回一個或多個參數值
4)所使用的端口緩存
5)工做模式
# 安裝相關的程序包 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)配置文件概覽
2)OID(Object ID)
最後一個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)配置並啓動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
Java虛擬機(JVM)具備內置的插件,使得可以使用JMX監視和管理它,還可使用JMX監視工具化的應用程序
JMX(Java Management Extensions)Java管理擴展
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,其餘操做徹底相同
1)Zabbix的三種架構
zabbix能高效的監控分佈式IT架構,在大型環境中zabbix提供兩種解決方案:proxy和node
2) Proxy or Node
代理(proxy)用於本區域數據蒐集,並將數據發送給server
節點(node)提供完整的zabbix server用以創建分佈式監控中的層級
節點(node)提供完整的Zabbix Server用以創建分佈式監控中的層級
Node自己是一臺server,它有有整的web頁面,完整的數據庫,它將數據源源不斷的傳送給Master
代理(proxy)用於本區域數據手機,並將數據發送給server
Proxy只有一個proxy的daemon進程,Proxy也有本身的數據庫,但它的數據庫只會保存必定時間的數據,它與Master通訊是將一批信息打包後發送到Master,Master將這些數據merge如Master數據庫
Master-Proxy相比Master-Node的優先:
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文件
# 複製並解壓 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的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 代理
1)註冊企業微信
2)添加告警組並添加成員
3)記錄企業ID
4)建立應用並
1)確認剛剛記錄的信息
告警組用戶的帳號、企業ID、建立應用的Secret、Agentld
2)下載消息推送腳本並測試
下載腳本後,將腳本保存在 /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=咱們邀請用戶的帳號
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)微信接受信息查看
主動觸發事件後,來查看微信是否能接受到信息
歷史數據不要保存太長時長;
儘可能讓數據緩存在數據庫服務器的內存中;
2)觸發器表達式
減小使用聚合函數min(), max(), avg();儘可能使用last(),nodata(),由於聚合函數,要運算
數據收集:polling較慢(減小使用SNMP/agentless/agent);儘可能使用trapping(agent(active)主動監控);
數據類型:文本型數據處理速度較慢;儘可能少收集類型爲文本 text或string類型的數據;多使用類型爲numeric 數值型數據 的;
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*
# 其餘解決方案,grafana+collectd+influxdb grafana:展現 collectd:收集 influxdb:存儲 # prometheus exporter:收集 alertmanager: grafana:展現