Zabbix監控

一、監控系統介紹

硬件-->系統-->應用
監控:
1.發現故障
2.監控業務系統業務流量
監控的兩種方式:
1.有agent
2.無agent
監控應該具有的主要功能
1.周期性的數據采集
被監控的主機安裝agent
不需要安裝agentless
時間流數據數據項稱之為一個監控的指標數據
監控模板,調用模板工具
發現能力:當增加設備時,可以自動納入監控中
同步內置接口,來發現監控系統,從而完成自動發現新增加的主機
添加主機的方式:1.手動添加。2.自動發現
監控數據的類型的設定:1.手動添加。2.使用模板
2.數據 存儲
數據存儲位置,可以自主研發,也可以使用已存在在數據庫,Zabbix使用的存儲為MySQL或者PGSQL,存儲容易成為瓶頸
3.定義閾值,發出警告
合理區間,每一項參數都需要定義一個合理的數據,超過該數據則發出警告,定義表達式,計算結構滿足條件才是危險,不滿足才認為正常。告警需要通過郵件等,
遠程命令或腳本完成自我修復、發出警告
4.可視化
將數據流生成圖標展示出來
1.cacti:采集數據,展示,存儲,告警不好,結合nagios
經過定義crontab任務+snmp+rrd(roundrobin database)數據庫
nagios:只報警,符合就報警,不符合就丟棄
2.Zabbix:采集數據,存儲數據,告警功能,可視化,可使用grafana做可視化
3.statsd(數據采集)+influxdb(時序數據庫)+grafana
4.prometheus+grafana
數據采集的方式,采集通道
1.agentless:ssh、telnet
2.agent:Zabbix agent、exporter、snmp(一般用于路由器)
二、Zabbix
架構體系:


1.jpg

Zabbix Server:負責接收agent發送的報告信息的核心組件,所有位置,統計數據及操作數據均由次組件進行
Zabbix Database:專用于存儲所有的配置信息,收集信息等
Zabbix web GUI:通常與Server運行在同一臺主機上,用來展示數據和配置監控項
Proxy:可選組件,用于分布式監控系統,代理收集監控信息,然后交給Zabbix Server
Aent:部署在被監控主機上,負責手機本地數據并發往Server或者代理端
工作架構
Zabbix Poller:周期性的獲取監控服務器


2.png

poller--->監控項--->觸發器-->觸發時間--->行為:1.條件 2.操作 :1.遠程命令 2.報警
1.主機添加到zabbix
2.定義指標項
3.定義觸發器
4.定義事件
5.處理動作
zabbix邏輯組件:
            主機組
            主機 
            監控項(item)
                key:實現獲取監控的目標上的數據的命令或腳本的名稱;
            應用(application):同一類監控項的集合;
            觸發器(trigger):表達式;PROBLEM, OK;
            事件(event):
            動作(action):由條件(condition)和操作(operation)組件;
            媒介(media):發送通知的通道;
            通知(notification):
            遠程命令(remote command):
            報警升級():
            模板(template):快速定義被監控主機的各監控項的預設項目集合;
            圖形(graph):用于展示歷史數據或趨勢數據的圖像;
            屏幕(screen):由多個graph組成

功能:1.采集數據、2.存儲、3.定義閾值、4.可視化
安裝方式和基本配置并且啟動服務
1.下載zabbix的倉庫

[root@tomcat2 ~]# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

2.安裝zabbix等相關軟件包,因為這里需要使用mysql數據庫,所以直接安裝

[root@ansible ansible]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server

3.配置MySQL

[root@tomcat2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
log_bin=mysql-bin
innodb_file_per_table=ON
skip_name=resolve=ON
max_connections = 20000
innodb_buffer_pool_size = 256M
[root@tomcat2 ~]# systemctl start mariadb
[root@tomcat2 ~]# mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
mysql> quit;

4.配置zabbix_server.conf

DBPassword=password #若mysql就在本地,則只需要修改者一處配置即可
----------------------------------若數據庫不在本地
# SourceIP=  #監聽ip
LogFileSize=0  #日志文件大小
# DBHost=localhost  #數據庫主機地址
DBName=zabbix  #數據庫名
DBUser=zabbix  #zabbix數據庫的用戶名
DBPassword=centos  #數據庫密碼

5.導入數據文件

[root@tomcat2 ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.10/create.sql.gz | mysql -uzabbix -p zabbix #其中-p 后面是跟的數據庫名,不是密碼,若需要直接給密碼,則-p密碼,注意:-p和密碼之間不能有空格

6.修改/etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai  #修改成正常時區,否則在初始化時會有問題

7.http://主機IP地址/zabbix/ 格式化即可,用戶名密碼默認為Admin zabbix
三、配置zabbix監控主機配置
配置/etc/zabbix/zabbix_agent.conf文件,需要授權才可以被監控,若是zabbix本機,則直接啟動服務即可

3.png

接口:
ZIB、snmp、JMX(jvm虛擬機監控)、ipmi(inter智慧平臺接口,在硬件級接口)
item:指標項指某一特定指標數據,數據流生成時有特定的命令獲取到的時間序列數據
指標:不斷變化的數據數列
指標項:key+執行命令組成
獲取數據
手動添加配置監控主機
1.通過zabbix-agent
配置被監控端服務器

[root@tomcat1 yum.repos.d]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.149
[root@tomcat1 yum.repos.d]# systemctl start zabbix-agent.service

創建主機過程


4.png

各個選項的意思


5.png

一般在局域網內部需要加密,只有在跨網絡在需要加密,加密浪費系統資源

6.png

資產清單配置


7.png

添加監控項:Applications監控組 items監控項,可以在key中傳遞參數,如system.cpu.load[percpu,avg1],在[]添加參數即可


8.png

9.png

可以手動測試需要那幢zabbix-get
zabbix-get -s 采集數據地址 -p PROT -k ”system.cpu.switches“

使用模板:內建模板,也可以在GitHub中找


10.png

11.png

12.png

13.png

告警
定義action需要在系統級別進行定義:
conditions(條件),通常是event產生,可以是多個條件
operations(操作):
remote command(遠程命令)或send message(發警報),可以警報升級
傳遞消息:media(信道)和zabbix的用戶或zabbix group,告警消息的收件地址,有與消息傳遞信道相匹配的收件地址

分布式監控系統
node:有單獨的監控功能,數據庫,一段時間后 同步給主server,若server故障,可當單獨的監控使用,2.2版本以后被刪除
proxy:只是代理訪問數據,有數據庫,代理無需配置,,數據庫為臨時存儲,不會持久存儲,需要周期性的同步server端配置
事件的定義


14.png

15.png

16.png

17.png

18.png

19.png

20.png

發送報警信息時,需要指定zabbix的用戶,定義該信道收件人所需要的收件地址
發消息
1.定義信道
2.定義針對信道對應的收件地址
定義信道
21.png

定義zabbix用戶與此信道匹配的收件地址
腳本存放位置:AlertScriptsPath=/usr/lib/zabbix/alertscripts/
參數:收件人,信息主體,正文
22.png

23.png

調用腳本相關
1.傳遞信息的通道
Eamil
Script:報警腳本,腳本存放路徑:/usr/lib/zabbix/alertscripts/

zabbix服務器在調用腳本時,會想其傳遞三個參數
$1:經由此信道接收信息的目標;
$2:subject
$3:body
zabbix 3.0之后的版本,此三個變量定義為內部宏:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}


24.png

2.收件地址
3.腳本
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import sys
    def formatAddr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))
    def send_mail(to_list,subject,content):
        mail_host = 'smtp.exmail.qq.com'
        mail_user = 'USERNAME@DOMAIN.TLD'
        mail_pass = 'YOUR_PASSWORD'
    #以上內容根據你的實際情況進行修改
        msg = MIMEText(content,'','utf-8')
        msg['Subject'] = Header(subject, 'utf-8').encode()
        msg['From'] = formatAddr('zabbix監控 <%s>' % mail_user).encode()
        msg['to'] = to_list
        try:
            s = smtplib.SMTP()
            s.connect(mail_host)
            s.login(mail_user,mail_pass)
            s.sendmail(mail_user,to_list,msg.as_string())
            s.close()
            return True
        except Exception,e:
            print str(e)
            return False

        if __name__ == "__main__":
            send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

執行自定義腳本前提
在agent需要完成的配置:
(1) zabbix用戶擁有所需要的管理權限;
編輯/etc/sudoers文件,注釋如下行;
# Defaults requiretty
添加如下行:
zabbix ALL=(ALL) NOPASSWD: ALL
(2) agent進程要允許執行遠程命令;
編輯/etc/zabbix/zabbix_agentd.conf,設置如下配置:
EnableRemoteCommands=1
重啟服務生效;
展示接口

25.png

Graph:將多個指標定義成一個張圖
26.png

一個屏幕顯示多個圖
27.png

28.png

29.png

屏幕輪詢設置,slide show
30.png

31.png

模板定義:可以是模板組,也可以鏈接其他模板,定義時,和定義主機一樣,但是不調用,不生效
導入模板
32.png

33.png

刪除模板等操作注意問題
34.png

宏:macro,預設的文本替換模式
級別:優先級別:主機--->模板---->全局
全局:administrator-->General--->Macros
模板:編輯模板--->Macros
主機:編輯主機--->Macros
類型:
內建:{MACRO_NAME},需要查詢官方文檔
自定義:{$MACRO_NAME}
命名方式:大寫字母、數字和下劃線
配置:
全局
35.png

模板宏
36.png

主機宏
37.png

監控同一個主機可以打開多路,優先選擇agent
配置網絡自動發現:
基于網絡掃描發現指定網絡中在線,然后添加主機
掃描在線主機問題,需要基于主機名來確定統一主機,然后通過判斷某主機上基于哪些服務是否存在等方式來判斷是否現在
步驟1.基于主機名和服務掃描在線主機
步驟2 添加主機,增加主機監控模板
步驟3.根據主機之上發現的服務,添加服務模板
主機:主機被發現、主機丟失、主機停機、主機啟用
服務:
發現事件
添加網絡發現,如果根據agent發現,需要想主機發送key請求
38.png

配置被發現的主機

[root@tomcat1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
Server=192.168.1.149  #指定服務器段IP地址

添加到監控主機


39.png

40.png

41.png

key的定義:
在zabbix.agent.conf端的配置文件上由用戶通過UserParameter指令定義key
格式:UserParameter=key,command
實例:不帶參數 定義key

UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $3}'
UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $4}'

手動獲取數據

zabbix_get -s 192.168.1.162 -k "memory.usage.used"

網頁調用key需要在key行數據
實例:帶可以接受參數的定義key

UserParameter=memory.usage[*],/usr/bin/awk '/^$1/{print $$2}' /proc/meminfo

手動測試

zabbix_get -s 192.168.1.162 -k "memory.usage[參數]"

模板導入完成,必須在每一個被監控的主機上配置相對應定義key的文件

web頁面監控
監控hiding站點資源下載速度,及頁面相應時間,相應代碼
1.哪個頁面
web場景(web scenario)每個應用都定義成一個場景
web頁面:每一個場景都應該監控哪些頁面
內建key:
web.test.in:傳輸速率
web.test.time:響應時長
web.test.rsocode :響應碼


42.png

43.png

44.png

主動監測和被動監測
被動檢測:相對于agent而言;agent, server向agent請求獲取配置的各監控項相關的數據,agent接收請求、獲取數據并響應給server;
主動檢測:相對于agent而言;agent(active),agent向server請求與自己相關監控項配置,主動地將server配置的監控項相關的數據發送給server;
agent端所需要基本配置:
ServerActive= #真正zabbix server端
Hostname= #報告的主機名
HostnameItem= #可以key發現主機名


44.png

zabbix自動捕獲數據
zabbix_sender發送數據:
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
配置過程
45.png

SNMP和JMX監控

SNMP:簡單網絡管理協議,主要用于監控交換機或路由器等
沒有采集數據的服務端
linux上實現SNMP需要借助net-snmp程序包
OID:可被采集的數據取一個數字,是一個倒置的樹樁結構

基于SNMP監控:   
        SNMP:簡單網絡管理協議;
            agent/nms       
            讀(get, getnext)、寫(set)、trap(陷阱);        
            161/udp 客戶端
            162/udp 管理端 
        SNMP:
            v1: 1989
            v2c: 1993
            v3: 1998        
        MIB:Management Information Base
        OID:Object ID       
        Linux啟用snmp的方法:
            # yum install net-snmp提供agent的   net-snmp-utils工具程序 
            配置文件:
                /etc/snmp/snmpd.conf
                定義ACL           
                .1.3.6.1.2.1.
                    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:網絡接口類型
                    ……      
                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.1                啟動服務:
                systemctl  start  snmpd.service 
                
        測試工具:
            # snmpget -v 2c  -c  public  HOST  OID
            # snmpwalk  -v 2c -c public  HOST  OID 
46.png

JMX,zabbix不能直接去jMX上獲取數據,需要配置java-gateway才可以,java-gateway也是服務

    tomcat主機設置:
            監控tomcat:啟用接口
                /etc/sysconfig/tomcat或/etc/tomcat/tomcat.conf文件,添加              
            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"
        
        zabbix-java-gateway主機設置:
            安裝 zabbix-java-gateway程序包,啟動服務;
        
        zabbix-server端設置(需要重啟服務):
            JavaGateway=172.16.0.70
            JavaGatewayPort=10052
            StartJavaPollers=5  # 啟動多少個子進程完成JMX
         
        添加監控項:
            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

zabbix分布式監控
node:中間代理每一個都能獨立的工作,擁有數據庫,比較重量級,幾乎全功能的監控數據庫:現在已經不支持
proxy:沒有配置,由server端分發給代理,采集到的數據臨時存儲,同步完成后,就刪除,也需要周期性的同步數據
適用:1.負載較大 2.跨機房,因為端口不確定,所以為了方便在防火墻上單獨管理
軟件包 zabbix-proxy-mysql
配置步驟:
1.安裝zabbix-proxy mariadb-server
2.初始化mariadb等相關信息,并且啟動mariadb服務,初始化,創建相關庫,授權,并且導入sql腳本
3.更改配置文件
Server=
zabbix server主機地址;
Hostname=
當前代理服務器的名稱;在server添加proxy時,必須使用此處指定的名稱;
需要事先確保server能解析此名稱;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1


47.png

4.將被監控端更改為proxy,將proxy改為server,在定義主機時,直接經過代理即可

調優

Database:
    歷史數據不要保存太長時長;
    盡量讓數據緩存在數據庫服務器的內存中;
    觸發器表達式:減少使用min(), max(), avg();盡量使用last(),nodata();
    數據收集:polling較慢(減少使用SNMP/agentless/agent);盡量使用trapping(agent(active));
    數據類型:文本型數據處理速度較慢;盡量少收集類型為text或string類型的數據;多使用類型為numeric的;
    zabbix服務器的進程:
        (1) 服務器組件的數量;
        alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
                
                StartPollers=60  #多開幾個處理請求,和cpu核心有關
                StartPingers=10  #多啟用幾個測試連通性
                ...
                StartDBSyncer=5 #數據同步,有多少個pollers最好配置多少個次選項
                ...
                
            (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:展示

    openfalcon  
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容