zabbix

2020-08-09 20:24:28

常見的監控軟體

cacti+nagios(曾經的監控軟體)
zabbix
Open-falcon(國人研發一款優秀的監控軟體)
Prometheus+Grafana(容器技術的監控軟體)

zabbix的四大核心任務

一、採集:週期性時序數據

  • 主機:伺服器、路由器、交換機、儲存…
  • 採集點:監控項,指標(metrics data)
  • 數據採集的通道: agentless,agent,SNMP: Simple Network Management Protocol等

二、儲存

  • 儲存系統:
    SQL: MySQL、PGSQL
    NoSQL: MongoDB、HBase、InfluxDB、Prometheus。。。。。
    rrd: Round Robin Database
  • 數據:
    歷史數據:3 mouths
    趨勢數據:1 year

三、告警

  • 閾值: severity
  • 告警: email、簡訊…

四、數據視覺化

zabix架構

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-GUtPdLvu-1596975851476)(http://www.rookiewyh.com/upload/2020/4/image-bf493a1a69884431b0fd75859f407d2f.png)]

zabbix server:負責接收agent發送的報告資訊的核心元件,所有設定、統計數據及操作數據均由其組織進行
database storage:專用於儲存所有設定資訊,以及由zabbix收集的數據
web GUI:zabbix的GUI介面,通常與server執行在同一臺主機上
proxy:可選元件,常用於分佈監控環境中,代理server收集部分被監控端的監控數據並統一發往server端
agent:部署在被監控主機上,負責收集本地數據併發往server端或proxy端

Zabbix常用的術語

  • 主機:要監控的網路裝置,可由ip和dns名稱指定
  • 主機組:主機的邏輯容器,可以包含主機和模板,但同一個組內的主機和模板不能互相鏈接;主機組通常在給使用者或主機組指派監控許可權時使用,一個主機可以屬於多個不同的主機組
  • 監控項(item):一個特定指標的相關數據,這些數據來自於被監控的物件;監控項是zabbix進行數據收集的核心,沒有item,將沒有數據;相對某監控物件來說,每個item都由"key"進行標識
  • 觸發器(trigger):一個表達式,用於評估某監控物件的某特定item內所接收到的數據是否在合理範圍內,即閾值;接收的數據量大於閾值時,觸發器狀態將從OK轉變爲problem,當數據量再次迴歸到合理範圍時,其狀態將從problem轉換回OK
  • 事件(event):即發生的一個值得關注的事情,例如觸發器狀態轉變,新的agent或重新上線的agent的自動註冊等
  • 動作(action):指對於特定事件事先定義的處理方法,通常包含操作(如發送通知)和條件(何時執行操作)
  • 報警升級(escalation):發送警報或執行遠端命令的自定義方案,如每隔5分鐘發送一次警報,共發送5次等
  • 媒介(media):發送通知的手段或通道,如email,jabber或SMS等
  • 通知(natification):通過選定的媒介向使用者發送的有關某事件的資訊
  • 遠端命令(remote command):預定義的命令,可以被監控主機處於某特定條件下時自動執行
  • 模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接鏈接至單個主機
  • 應用(application):一組item的集合
  • web場景(web scennario):用於檢測web站點可用性的一個或多個HTTP請求
    前端(frontend):zabbix的web介面

zabbix一般需要做哪些設定

1,監控物件:主機,主機組
2,監控項
3,監控通道

安裝zabbix

zabbix官方站點
zabbix官方下載地址
安裝步驟(可參考官網下載地址處的步驟)
一,安裝mariadb並修改mariadb組態檔,建立zabbix倉庫後安裝zabbix-server-mysql zabbix-web-mysql zabbix-agent

yum install mariadb-server -y
vi /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=ON  ###mysqld下新增該行,跳過主機名解析
systemctl start mariadb
systemctl enable mariadb
rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum clean all

若上述兩條命令不能執行的話,手動搭建zabbix的yum倉庫  
vi /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix3.0
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/
gpgcheck=0
enable=1

[zabbix-non-supported]
name=zabbix3.0-non-supported
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
gpgcheck=0
enable=1

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y

二,建立zabbix數據庫,建立使用者並對數據庫授權,根據zabbix提供的指令碼生成數據庫表格

mysql
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by '123.com';
exit
[root@localhost ~]# rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-3.0.30
/usr/share/doc/zabbix-server-mysql-3.0.30/AUTHORS
/usr/share/doc/zabbix-server-mysql-3.0.30/COPYING
/usr/share/doc/zabbix-server-mysql-3.0.30/ChangeLog
/usr/share/doc/zabbix-server-mysql-3.0.30/NEWS
/usr/share/doc/zabbix-server-mysql-3.0.30/README
/usr/share/doc/zabbix-server-mysql-3.0.30/create.sql.gz  ###記住該行
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

三,設定zabbix-server的組態檔(預設/etc/zabbix/zabbix_server.conf),指定數據庫的地址DBHost,數據庫名字DBName,數據庫使用者DBUser,數據庫密碼DBPassword,啓動zabbix

vi /etc/zabbix/zabbix_server.conf 
LogFileSize=512   ###日誌大小限制,超過該值卷動,預設0,不限
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123.com 
systemctl start zabbix-server
systemctl enable zabbix-server
[root@localhost ~]# ss -ntl
State       Recv-Q Send-Q              Local Address:Port                             Peer Address:Port              
LISTEN      0      50                              *:3306                                        *:*                  
LISTEN      0      128                             *:22                                          *:*                  
LISTEN      0      100                     127.0.0.1:25                                          *:*                  
LISTEN      0      128                             *:10051                                       *:*                  
LISTEN      0      128                          [::]:22                                       [::]:*                  
LISTEN      0      100                         [::1]:25                                       [::]:*                  
LISTEN      0      128                          [::]:10051                                    [::]:*     

四,修改php組態檔或者修改web中zabbix組態檔修改時區,啓動httpd

vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
systemctl start httpd
systemctl enable httpd

五,存取web地址/zabbix,根據嚮導一步步安裝zabbix-web,登錄(預設Admin/zabbix)
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-ITQvGrfy-1596975851480)(http://www.rookiewyh.com/upload/2020/4/image-9915831cdf7e42d0b157646b334c6b93.png)]
image.png
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-StQjo1l1-1596975851483)(http://www.rookiewyh.com/upload/2020/4/image-326645286ff64decbab9f9c1ca676a98.png)]

總結安裝步驟(可參考官方安裝步驟)

  1. 安裝mariadb,組態檔,授權
  2. 安裝zabbix-server-mysql,zabbix-web-mysql,zabbix-agent
  3. 匯入zabbix數據庫檔案,組態檔,php時區設定
  4. 啓動

新增監控主機

一、首先要在監控主機上安裝zabbix-agent,當然zabbix-server也須納入監控之中,所以在之前我們安裝了zabbix-agent
二、設定zabbix-agent的組態檔

[root@localhost ~]# grep "^###" /etc/zabbix/zabbix_agentd.conf
############ GENERAL PARAMETERS #################
### Option: PidFile
### Option: LogType
### Option: LogFile
### Option: LogFileSize
### Option: DebugLevel
### Option: SourceIP
### Option: EnableRemoteCommands
### Option: LogRemoteCommands
##### Passive checks related
### Option: Server                ###zabbix-server地址
### Option: ListenPort            ###監聽的埠,預設10050
### Option: ListenIP              ###監聽的IP,預設所有ip
### Option: StartAgents           ###開啓幾個子進程來守護行程
##### Active checks related
### Option: ServerActive          ###zabbix-server地址
### Option: Hostname              ###這項以及以下三項均爲標識被監控主機的
### Option: HostnameItem
### Option: HostMetadata
### Option: HostMetadataItem
### Option: RefreshActiveChecks
### Option: BufferSend
### Option: BufferSize
### Option: MaxLinesPerSecond
############ ADVANCED PARAMETERS #################
### Option: Alias
### Option: Timeout
### Option: AllowRoot
### Option: User
### Option: Include
####### USER-DEFINED MONITORED PARAMETERS #######
### Option: UnsafeUserParameters
### Option: UserParameter
####### LOADABLE MODULES #######
### Option: LoadModulePath
### Option: LoadModule
####### TLS-RELATED PARAMETERS #######
### Option: TLSConnect
### Option: TLSAccept
### Option: TLSCAFile
### Option: TLSCRLFile
### Option: TLSServerCertIssuer
### Option: TLSServerCertSubject
### Option: TLSCertFile
### Option: TLSKeyFile
### Option: TLSPSKIdentity
### Option: TLSPSKFile

可以看到zabbix-agent設定分爲通用設定、高階設定、使用者定義的監控設定、可載入模組和安全相關設定,而通用設定裡又有兩項——被動檢查和主動檢查,我們只需要設定這兩個地方即可

三、啓動zabbix-agent,以及在web介面將其修改爲enable
zabbix-server上的zabbix-agent無需修改什麼設定直接啓動就好了

systemctl start zabbix-agent
systemctl enable zabbix-agent

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-07fvX1Lu-1596975851485)(http://www.rookiewyh.com/upload/2020/4/image-84c0cbdbb70745a1acdc600722a5bb47.png)]

四、新增一個真正的監控主機
開啓一個新機器(192.168.39.12/node1),複製zabbix的yum倉庫到node1,在node1上安裝zabbix-agent

scp /etc/yum.repos.d/zabbix.repo node1:/etc/yum.repos.d/
yum install zabbix-agent -y

設定zabbix_agentd.conf,啓動zabbix-agent

vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.39.11
ServerActive=192.168.39.11
Hostname=node1

systemctl start zabbix-agent
systemctl enable zabbix-agent

新增host groups
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-lxKHI61G-1596975851486)(http://www.rookiewyh.com/upload/2020/4/image-80a61bef48514aed87d4bb832c9f67ba.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-59OUk9dg-1596975851487)(http://www.rookiewyh.com/upload/2020/4/image-5a9d6ba7dc974d869a9f991f8222a0b4.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-L4Ru9KMD-1596975851488)(http://www.rookiewyh.com/upload/2020/4/image-5142609dfcd44bdcaa0af9bf56de3053.png)]
新增host
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-bqj4YtCM-1596975851489)(http://www.rookiewyh.com/upload/2020/4/image-9d52dd9867f54a1c9067030306503924.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-JUbA76Pt-1596975851490)(http://www.rookiewyh.com/upload/2020/4/image-2668721fac744cc48069daf2c1318a29.png)]
image.png
新增items
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-VycglsMH-1596975851492)(http://www.rookiewyh.com/upload/2020/4/image-a2f9d27ec21344a98746a7f51d764625.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-t8iXlFSL-1596975851493)(http://www.rookiewyh.com/upload/2020/4/image-c4809b0149a7447985b8324f970636d5.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-PplqN9ju-1596975851493)(http://www.rookiewyh.com/upload/2020/4/image-7f3642979f9b4359b75af444f7d3359f.png)]
參考key值

後面還有trigger,action等的操作就不截圖細說,簡單說下:

  • 新增host groups,新增host,新增items
  • 定義trigger,根據items來指定報警級別,還可定義各trigger之間的依賴關係,防止發生如交換機壞了卻導致交換下的所有伺服器全報警這種情況
  • 定義action,action可實現警報通知、警報升級和remote command,與之相配的需要設定media(你是通過指令碼還是郵箱什麼媒體通知)
  • 警報通知只會發送給zabbix使用者,所以你需要在user上新增media
    注意:當使用remote command時需要開啓zabbix-agent組態檔上的一項EnableRemoteCommands

zabbix進階

1、宏

宏型別:內建宏和自定義宏
zabbix官網宏說明

宏級別:

  • 全域性:administration --> General --> Macros
  • 模板:編輯模板 --> Macros
  • 主機:編輯主機 --> Macros
    優先順序:主機宏>模板宏>全域性宏

2、自定義key

key的官方中文釋義:https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/zabbix_agent

在zabbix_agentd.conf中定義,爲了方便管理一般都在子組態檔,如zabbix_agentd/nginx.conf

#       Format: UserParameter=<key>,<shell command>
UserParameter=nginx.status.activeconns,curl -s http://node01/status | awk '/^Active/{print $3}'
systemctl restart zabbix-agent  ### 設定完需重新啓動

可安裝zabbix-get工具測試自定義key
zabbix-get使用範例

zabbix_get -s 192.168.39.12 -p 10050 -k "nginx.status.activeconns"

key的傳參

UserParameter=memory.info[*],awk '/^$1/{print $$2}' /proc/meminfo
### 爲了區分awk和key的位置變數,awk本身的位置變數要用$$#表示
測試
zabbix_get -s node01 -k 'memeory.info[MemTotal]'
1865308

3、template

template分享社羣

基本觸發器的表達格式
{:.()}

print $$2}’ /proc/meminfo

爲了區分awk和key的位置變數,awk本身的位置變數要用$$#表示

測試
zabbix_get -s node01 -k ‘memeory.info[MemTotal]’
1865308

### 3、template  
[template分享社羣](https://share.zabbix.com/list-alpha/i?limitstart=0)



基本觸發器的表達格式  
{<server>:<key>.<funtion>(<parameter>)}<operator><constant>

64960