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協議用途java

SNMP:Simple Network Management Protocol 簡單網絡管理協議(很是古老的協議)node

  • 用於網絡管理的協議
  • SNMP用於網絡設備的管理:交換機、路由器

版本:mysql

  • v1:1989
  • v2c:1993
  • v3:1998

2)snmp的組件git

MIB:Management Information Base 管理信息庫(每個agent都有一個MIB庫)github

  • 定義了全部可被管理對方的集合,並且還額外定義了被管理對象的名稱、訪問權限、數據類型等屬性
  • 實現了可以定義雙方可接受的監控組件以及監控組件中數據存儲格式的一個組件
  • 還能實現將每個被管理對象的ID (Object ID,OID)對應到名稱的轉換

MIB視圖:MIB庫的子集web

  • 受權:將某MIB視圖與某Community綁定來實現

SMI:MIB表示符號sql

SNMP協議自己數據庫

3)snmp通訊方式vim

# 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)配置文件概覽

  1. 定義認證符,將社區名稱"public"映射爲"安全名稱"
  2. 將安全名稱映射到一個組名
  3. 爲咱們建立一個視圖,讓咱們的團隊有權利

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模板

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)下載消息推送腳本並測試

下載腳本後,將腳本保存在 /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:展現
相關文章
相關標籤/搜索