Zabbix監(jiān)控

一、監(jiān)控系統(tǒng)介紹

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


1.jpg

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


2.png

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

功能:1.采集數(shù)據(jù)、2.存儲、3.定義閾值、4.可視化
安裝方式和基本配置并且啟動服務(wù)
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等相關(guān)軟件包,因為這里需要使用mysql數(shù)據(jù)庫,所以直接安裝

[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就在本地,則只需要修改者一處配置即可
----------------------------------若數(shù)據(jù)庫不在本地
# SourceIP=  #監(jiān)聽ip
LogFileSize=0  #日志文件大小
# DBHost=localhost  #數(shù)據(jù)庫主機(jī)地址
DBName=zabbix  #數(shù)據(jù)庫名
DBUser=zabbix  #zabbix數(shù)據(jù)庫的用戶名
DBPassword=centos  #數(shù)據(jù)庫密碼

5.導(dǎo)入數(shù)據(jù)文件

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

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

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

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

3.png

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

[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

創(chuàng)建主機(jī)過程


4.png

各個選項的意思


5.png

一般在局域網(wǎng)內(nèi)部需要加密,只有在跨網(wǎng)絡(luò)在需要加密,加密浪費(fèi)系統(tǒng)資源

6.png

資產(chǎn)清單配置


7.png

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


8.png

9.png

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

使用模板:內(nèi)建模板,也可以在GitHub中找


10.png

11.png

12.png

13.png

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

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


14.png

15.png

16.png

17.png

18.png

19.png

20.png

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

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

23.png

調(diào)用腳本相關(guān)
1.傳遞信息的通道
Eamil
Script:報警腳本,腳本存放路徑:/usr/lib/zabbix/alertscripts/

zabbix服務(wù)器在調(diào)用腳本時,會想其傳遞三個參數(shù)
$1:經(jīng)由此信道接收信息的目標(biāo);
$2:subject
$3:body
zabbix 3.0之后的版本,此三個變量定義為內(nèi)部宏:
{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'
    #以上內(nèi)容根據(jù)你的實(shí)際情況進(jìn)行修改
        msg = MIMEText(content,'','utf-8')
        msg['Subject'] = Header(subject, 'utf-8').encode()
        msg['From'] = formatAddr('zabbix監(jiān)控 <%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])

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

25.png

Graph:將多個指標(biāo)定義成一個張圖
26.png

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

28.png

29.png

屏幕輪詢設(shè)置,slide show
30.png

31.png

模板定義:可以是模板組,也可以鏈接其他模板,定義時,和定義主機(jī)一樣,但是不調(diào)用,不生效
導(dǎo)入模板
32.png

33.png

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

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

模板宏
36.png

主機(jī)宏
37.png

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

配置被發(fā)現(xiàn)的主機(jī)

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

添加到監(jiān)控主機(jī)


39.png

40.png

41.png

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

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

手動獲取數(shù)據(jù)

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

網(wǎng)頁調(diào)用key需要在key行數(shù)據(jù)
實(shí)例:帶可以接受參數(shù)的定義key

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

手動測試

zabbix_get -s 192.168.1.162 -k "memory.usage[參數(shù)]"

模板導(dǎo)入完成,必須在每一個被監(jiān)控的主機(jī)上配置相對應(yīng)定義key的文件

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


42.png

43.png

44.png

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


44.png

zabbix自動捕獲數(shù)據(jù)
zabbix_sender發(fā)送數(shù)據(jù):
zabbix server上的某主機(jī)上,直接定義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監(jiān)控

SNMP:簡單網(wǎng)絡(luò)管理協(xié)議,主要用于監(jiān)控交換機(jī)或路由器等
沒有采集數(shù)據(jù)的服務(wù)端
linux上實(shí)現(xiàn)SNMP需要借助net-snmp程序包
OID:可被采集的數(shù)據(jù)取一個數(shù)字,是一個倒置的樹樁結(jié)構(gòu)

基于SNMP監(jiān)控:   
        SNMP:簡單網(wǎng)絡(luò)管理協(xié)議;
            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:系統(tǒng)描述信息,SysDesc
                    1.3.0:監(jiān)控時間, SysUptime
                    1.5.0:主機(jī)名,SysName
                    1.7.0:主機(jī)提供的服務(wù),SysService                 
                    2.1.0:網(wǎng)絡(luò)接口數(shù)目
                    2.2.1.2:網(wǎng)絡(luò)接口的描述信息
                    2.2.1.3:網(wǎng)絡(luò)接口類型
                    ……      
                view    systemview    included   .1.3.6.1.2.1.1
                view    systemview    included   .1.3.6.1.2.1.2  # 網(wǎng)絡(luò)接口的相關(guān)數(shù)據(jù)
                view    systemview    included   .1.3.6.1.4.1.2021  # 系統(tǒng)資料負(fù)載,memory, disk io, cpu load 
                view    systemview    included   .1.3.6.1.2.1.25.1.1                啟動服務(wù):
                systemctl  start  snmpd.service 
                
        測試工具:
            # snmpget -v 2c  -c  public  HOST  OID
            # snmpwalk  -v 2c -c public  HOST  OID 
46.png

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

    tomcat主機(jī)設(shè)置:
            監(jiān)控tomcat:啟用接口
                /etc/sysconfig/tomcat或/etc/tomcat/tomcat.conf文件,添加              
            CATALINA_OPTS="-Djava.rmi.server.hostname=(TOMCAT_SERVER_IP指當(dāng)前監(jiān)聽地址) -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主機(jī)設(shè)置:
            安裝 zabbix-java-gateway程序包,啟動服務(wù);
        
        zabbix-server端設(shè)置(需要重啟服務(wù)):
            JavaGateway=172.16.0.70
            JavaGatewayPort=10052
            StartJavaPollers=5  # 啟動多少個子進(jìn)程完成JMX
         
        添加監(jiān)控項:
            jmx[object_name,attribute_name]
                object name - 它代表MBean的對象名稱
                attribute name - 一個MBean屬性名稱,可選的復(fù)合數(shù)據(jù)字段名稱以點(diǎn)分隔
            
            示例:
                jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
                
                
        jmx的詳細(xì)文檔:
            https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html

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


47.png

4.將被監(jiān)控端更改為proxy,將proxy改為server,在定義主機(jī)時,直接經(jīng)過代理即可

調(diào)優(yōu)

Database:
    歷史數(shù)據(jù)不要保存太長時長;
    盡量讓數(shù)據(jù)緩存在數(shù)據(jù)庫服務(wù)器的內(nèi)存中;
    觸發(fā)器表達(dá)式:減少使用min(), max(), avg();盡量使用last(),nodata();
    數(shù)據(jù)收集:polling較慢(減少使用SNMP/agentless/agent);盡量使用trapping(agent(active));
    數(shù)據(jù)類型:文本型數(shù)據(jù)處理速度較慢;盡量少收集類型為text或string類型的數(shù)據(jù);多使用類型為numeric的;
    zabbix服務(wù)器的進(jìn)程:
        (1) 服務(wù)器組件的數(shù)量;
        alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
                
                StartPollers=60  #多開幾個處理請求,和cpu核心有關(guān)
                StartPingers=10  #多啟用幾個測試連通性
                ...
                StartDBSyncer=5 #數(shù)據(jù)同步,有多少個pollers最好配置多少個次選項
                ...
                
            (2) 設(shè)定合理的緩存大小 
                CacheSize=8M
                HistoryCacheSize=16M
                HistoryIndexCacheSize=4M
                TrendCacheSize=4M
                ValueCacheSize=4M
                
            (3) 數(shù)據(jù)庫優(yōu)化
                分表:
                    history_*
                    trends*
                    events*             
其它解決方案:
    
    grafana:展示
    collectd:收集
    influxdb:存儲
    
    grafana+collectd+influxdb
    
    prometheus:
        exporter:收集
        alertmanager:
    grafana:展示

    openfalcon  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容