zabbix自動化監控基礎

zabbix安裝配置文檔 2php

zabbix-server 安裝配置(基礎配置) 2前端

zabbix agent安裝配置 5mysql

2.1 主動模式和被動模式 6linux

2.2 安裝配置zabbix_agent 12web

2.3 配置zabbix-server 前端(active)模式 18正則表達式

2.4 自動發現 18sql

2.5 自動註冊 21數據庫

附錄: 22json

1 自動發現(原理) 22vim

網絡發現簡介 22

2 自動發現(具體操做) 24

3 自動註冊 33

4 zabbix low-level discover zabbix批量部署必備 38

1. 概述 38

2. Discovery之文件系統 38

3. 自定義LLD規則 44

5 zabbix自定義自動發現服務(low-level-discovery)監控系統服務 47

1 ) 概述 47

2 )  LLD腳本 48

3) 添加模板和自動發現規則 52

6 解決現實中文亂碼: 65

7 zabbix_agent playbook 批量安裝 66

 

 

zabbix安裝配置文檔

 

zabbix-server 安裝配置(基礎配置)

# 軟件版本 4.0.4172.20.50.11

# 參考地址 https://www.zabbix.com/download

# 導入repo

rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

# 安裝配置數據庫

yum remove mariadb-libs -y

# 上傳mysql相關包

mysql-community-client-5.7.22-1.el7.x86_64.rpm

mysql-community-devel-5.7.23-1.el7.x86_64.rpm  

mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm

mysql-community-common-5.7.22-1.el7.x86_64.rpm  

mysql-community-libs-5.7.22-1.el7.x86_64.rpm   

mysql-community-server-5.7.22-1.el7.x86_64.rpm

 

yum install * -y

 

vim /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

character_set_server = utf8

interactive_timeout = 120

wait_timeout = 120

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[client]

socket=/data/mysql/mysql.sock

 

# 在配置文件中[mysqld] 中添加skip-grant-tables 而且重啓mysqld服務,跳過受權表

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'JkW&$y42PL5&y#cx';

GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'JkW&$y42PL5&y#cx';

FLUSH PRIVILEGES;

# 註釋 數據庫配置中skip-grant-tables 配置

# 建立zabbix

create database zabbix character set utf8 collate utf8_bin;

 

# 安裝zabbix相關包

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

 

# 初始化zabbix表結構

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p JkW&$y42PL5&y#cx

 

[root@VM_4_84_centos mysql]# cat /etc/zabbix/zabbix_server.conf | egrep -v "^$|^#|#"

LogFile=/var/log/zabbix/zabbix_server.log

LogFileSize=0

PidFile=/var/run/zabbix/zabbix_server.pid

SocketDir=/var/run/zabbix

DBName=zabbix

DBUser=zabbix

DBPassword=JkW&$y42PL5&y#cx

DBSocket=/data/mysql/mysql.sock

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

Timeout=4

AlertScriptsPath=/usr/lib/zabbix/alertscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

LogSlowQueries=3000

 

# 修改時區

vim /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai

 

# 啓動服務

systemctl restart zabbix-server zabbix-agent httpd

systemctl enable zabbix-server zabbix-agent httpd

 

# 配置前端

http://172.20.50.11/zabbix

 

# 生成的配置信息

Database type MySQL

Database server 172.20.50.11

Database port 3306

Database name zabbix

Database user zabbix

Database password ****************

 

Zabbix server 172.20.50.11

Zabbix server port 10051

Zabbix server name zabbix_server

 

# 配置信息路徑

Configuration file "/etc/zabbix/web/zabbix.conf.php" created.

 

# 初始帳號

Admin/zabbix

 

 

 

zabbix agent安裝配置

 

2.1 主動模式和被動模式

主動模式的流程:

客戶端每隔一段時間主動向服務端發起鏈接請求>服務端收到請求,查詢客戶端須要取的item信息,發送給客戶端–>客戶端收集數據發送服務端–>結束。

被動模式的流程:

客戶端開一個端口默認10050,等待服務端來取數據,而後客戶端收集數據發送到服務端,而後結束。

 

zabbix agent檢測分爲主動(agent active)和被動(agent)兩種形式,主動與被動的說法均是相對於agent來討論的。

簡單說明一下主動與被動的區別以下:

主動agent請求server獲取主動的監控項列表,並主動將監控項內須要檢測的數據提交給server/proxy

被動serveragent請求獲取監控項的數據,agent返回數據。

zabbix agent通訊過程當中的協議均基於json格式,格式以下:

- "ZBXD\x01" (5 bytes)

- data length (8 bytes). 1 will be formatted as 01/00/00/00/00/00/00/00 (eight bytes in HEX, 64 bit number)

 

備註:爲了不內存耗盡,server限制每一個通訊鏈接最多使用128MB內存。

 

被動檢測:

server發起以下請求

<item key>\n

Aegent返回以下響應數據

<HEADER><DATALEN><DATA>[\0<ERROR>]

supported items通訊過程:

1)  Server打開一個TCP鏈接

2)  Server發送請求agent.ping\n

3)  Agent接收到請求而且響應<HEADER><DATALEN>1

4)  Server處理接收到的數據

 

關閉TCP鏈接:

not supported items通訊過程:

1)  Server打開一個TCP鏈接

2)  Server發送請求vfs.fs.size[/nono]\n

3)  Agent接收請求而且返回響應數據 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory

4)  Server接收並處理數據, item的狀態改成「 not supported 」

5) 關閉TCP鏈接

 

主動檢測:

zabbix首先向ServerActive配置的IP請求獲取active items,獲取並提交active tiems數據值server或者proxyzabbix多久獲取一次active items?它會根據配置文件中的RefreshActiveChecks的頻率進行,若是獲取失敗,那麼將會在60秒以後重試獲取ACTIVE ITEMS列表。

Agent請求:

<HEADER><DATALEN>{

    "request":"active checks",

    "host":"<hostname>"

}


Server響應列表:

<HEADER><DATALEN>{

    "response":"success",

    "data":[

        {

            "key":"log[/home/zabbix/logs/zabbix_agentd.log]",

            "delay":30,

            "lastlogsize":0,

            "mtime":0

        },

        {

            "key":"agent.version",

            "delay":600,

            "lastlogsize":0,

            "mtime":0

        },

        {

            "key":"vfs.fs.size[/nono]",

            "delay":600,

            "lastlogsize":0,

            "mtime":0

        }

    ]

}

 

 


備註:獲取到的items列表中的全部item屬性key, delay, lastlogsize ,mtime都必須存在,獲取列表的通訊過程以下:

1)  Agent打開TCP鏈接(主動檢測變成Agent打開)

2)  Agent請求items檢測列表

3)  Server返回items列表

4)  Agent 處理響應

5)  關閉TCP鏈接

6)  Agent開始收集數據

7)  提交active items數據

Agent發送請求:

<HEADER><DATALEN>{

    "request":"agent data",

    "data":[

        {

            "host":"<hostname>",

            "key":"agent.version",

            "value":"2.4.0",

            "clock":1400675595,

            "ns":76808644

        },

        {

            "host":"<hostname>",

            "key":"log[/home/zabbix/logs/zabbix_agentd.log]",

            "lastlogsize":112,

            "value":" 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).",

            "clock":1400675595,

            "ns":77053975

        },

        {

            "host":"<hostname>",

            "key":"vfs.fs.size[/nono]",

            "state":1,

            "value":"Cannot obtain filesystem information: [2] No such file or directory",

            "clock":1400675595,

            "ns":78154128

        }

    ],

    "clock": 1400675595,

    "ns": 78211329

}


Server響應數據

{

 "response":"success",

 "info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534"

 }


備註:若是有些數據提交失敗,好比hostitem被刪除或者禁用,agent不會嘗試從新提交

主動檢測提交數據過程以下:

1)  Agent創建TCP鏈接

2)  Agent提交items列表收集的數據

3)  Server處理數據,並返回響應狀態

4)  關閉TCP鏈接

 

 

被動模式agent配置:

[root@zabbix_client ]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

StartAgents=3

Server=172.20.50.11

ServerActive=172.20.50.11

Hostname=zabbix_client

HostMetadataItem=system.uname

 

systemctl restart zabbix-agent

 

由於zabbix監控模板默認使用的就是被動模式,因此zabbix-server端直接添加hosts默認使用的就是被動模式。

 

主動模式配置:

[root@zabbix_master zabbix-server-mysql-3.2.7]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

StartAgents=0

Server=172.20.50.11  # 注意,這裏雖然沒啥用,可是獲取能夠解決前端能夠蒐集數據可是顯示狀態爲紅色的bug

ServerActive=172.20.50.11

Hostname=172.20.50.11

Include=/etc/zabbix/zabbix_agentd.d/*.conf

 

客戶端agent模式,StartAgents=0設置爲0表示關閉被動模式,被監控端的 zabbix_agentd 不監聽本地端口,因此沒法在 netstat -tunpl 中查看到zabbix_agentd進程

取值範圍:0-100

默認值:3

zabbix啓動以後開啓被動監控的進程數量,若是設置爲0,那麼zabbix被動監控被禁用,而且不會監聽相應端口,也就是說10050端口不會開啓。

2.2 安裝配置zabbix_agent

# 手動安裝zabbix_agent

 

tar xf zabbix_agents-4.0.0-centos7-amd64-openssl.tar.gz -C /opt/

mv /opt/zabbix_agents-4.0.0-centos7-amd64-openssl /opt/zabbix_agent

cd /opt/zabbix_agent

mkdir pids

mkdir log

useradd zabbix

chown -R zabbix.zabbix /opt/zabbix_agent

 

vim /etc/init.d/zabbix_agentd

#!/bin/bash

#

# chkconfig: - 90 10

# description:  Starts and stops Zabbix Agent using chkconfig

# Tested on Fedora Core 2 - 5

# Should work on all Fedora Core versions

#

# @name: zabbix_agentd

# @author: Alexander Hagenah <hagenah@topconcepts.com>

# @created: 18.04.2006

#

# Modified for Zabbix 2.0.0

# May 2012, Zabbix SIA

#

# Source function library.

. /etc/init.d/functions

 

# Variables

# Edit these to match your system settings

 

# Zabbix-Directory

BASEDIR=/opt/zabbix_agent

 

# Binary File

BINARY_NAME=zabbix_agentd

 

# Full Binary File Call

FULLPATH=$BASEDIR/sbin/$BINARY_NAME

 

# config file

CONFIG=$BASEDIR/conf/zabbix_agentd.conf

# PID file

PIDFILE=/opt/zabbix_agent/pids/$BINARY_NAME.pid

 

# Establish args

ERROR=0

STOPPING=0

 

#

# No need to edit the things below

#

 

# application checking status

if [ -f $PIDFILE  ] && [ -s $PIDFILE ]

then

PID=`cat $PIDFILE`

 

if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null && [ $BINARY_NAME == `ps -e | grep $PID | awk '{print $4}'` ]

then

STATUS="$BINARY_NAME (pid `pidof $APP`) running.."

RUNNING=1

else

rm -f $PIDFILE

STATUS="$BINARY_NAME (pid file existed ($PID) and now removed) not running.."

RUNNING=0

fi

else

if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]

then

STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."

else

STATUS="$BINARY_NAME (no pid file) not running"

fi

RUNNING=0

fi

 

# functions

start() {

if [ $RUNNING -eq 1 ]

then

echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"

else

action $"Starting $BINARY_NAME: " $FULLPATH -c $CONFIG

touch /var/lock/subsys/$BINARY_NAME

fi

}

 

stop() {

echo -n $"Shutting down $BINARY_NAME: "

killproc $BINARY_NAME

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME

RUNNING=0

}

 

 

# logic

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status $BINARY_NAME

;;

restart)

stop

sleep 10

start

;;

help|*)

echo $"Usage: $0 {start|stop|status|restart|help}"

cat <<EOF

 

start - start $BINARY_NAME

stop - stop $BINARY_NAME

status - show current status of $BINARY_NAME

restart - restart $BINARY_NAME if running by sending a SIGHUP or start if not running

help - this screen

 

EOF

exit 1

;;

esac

 

exit 0

 

chmod +x /etc/init.d/zabbix_agentd

 

cd zabbix_agentd/

mv userparameter_examples.conf userparameter_examples.conf.bak

mv serparameter_mysql.conf serparameter_mysql.conf.bak

 

 

[root@vm_110_2_centos conf]# cat /opt/zabbix_agent/conf/zabbix_agentd.conf

PidFile=/opt/zabbix_agent/pids/zabbix_agentd.pid

LogFile=/opt/zabbix_agent/logs/zabbix_agentd.log

LogFileSize=0

StartAgents=0

ServerActive=172.20.50.11

Server=172.20.50.11

Hostname=本機IP地址

Include=/opt/zabbix_agent/conf/zabbix_agentd/*.conf

UnsafeUserParameters=1

 

 

/etc/init.d/zabbix_agentd start

chkconfig zabbix_agentd on

 

 

2.3 配置zabbix-server 前端(active)模式

1) 建立模板

建立一個主動模式的模板:

 

克隆一個模板,把全部的類型改成Zabbix agent(Active)主動模式:

克隆模板:Configuration–》Template–》Template OS Linux(選擇須要克隆的模板)–》Full clone(最下面)–》Template nameTemplate OS Linux Active–》Add

把這個模板軟鏈接的模板remove掉,,添加一個新的克隆的類型爲主動的。另外,克隆模板成功後,記得修改類型,改成主動模式。

 

2.4 自動發現

zabbix自動發現主機,能夠在ansible安裝好zabbix客戶端後,服務器能直接發現客戶端

 

 

1)建立一個規則,名字自定義,ip範圍是想要發現的主機範圍。時間間隔,每多久發現一次。檢查,建議用uptime,這樣代表能用zabbix的自帶的鍵值都能監控到,就能夠添加該主機了。設置準則就不要用ip地址了,會出錯的。而後更新就能夠了。

 

2)接下來是操做,也就是你的動做主要要作什麼,我添加了3點,在操做細節那裏添加,分別是把發現的主機添加進來,第二點是發主機添加到Base Group組裏,第三點是給主機與一個模板關聯。最後點更新就能夠了。

 

 

2.5 自動註冊

zabbix客戶端搭建好後,自動註冊到zabbix服務端,這樣能夠下降zabbix服務端的負載。

 

 

 

 

附錄:

1 自動發現(原理)

網絡發現簡介

網絡發現有什麼用?網絡發現怎麼配置?咱們帶着這兩個問題開始咱們的網絡發現之旅。好比小明有100臺服務器,不想一臺臺主機去添加,能不能讓zabbix自動添加主機呢,固然能夠,網絡發現即是這個功能,固然前提條件是全部服務器都已經安裝了agent或者snmp(其實也能夠不用,鑑於咱們大部分功能都用agent,因此請安裝上agent),server掃描配置好的ip段,自動添加host,自動給host link模板,自動加到主機組裏等等。網絡發現功能讓咱們能更快速的部署zabbix、簡化zabbix管理、而且在常常變更的環境裏面也不須要花太多的精力,畢竟網絡發現也能隨時變化。雖然網絡發現能幹不少事情,可是它沒法發現網絡拓撲。

zabbix網絡發現基於以下信息

ip範圍

可用的外部服務(FTP, SSH, WEB, POP3, IMAP, TCP, etc

來自zabbix agent的信息

來自snmp agent的信息

網絡發現由兩個階段組成:discoveryactions

Discovery發現

zabbix按期掃描網絡發現規則中的ip範圍,每一個規則中都定義了一組須要檢測的服務,在這些ip範圍內一一掃描

網絡發現模塊每次檢測到servicehostip)都會生成一個discovery事件,以下是事件

時間

條件

Service Up

zabbix檢測到可用的service

Service Down

zabbix沒法檢測到service

Host Up

某個ip上至少有一個serviceup狀態

Host Down

全部service都無響應

Service Discovered

一個service首次被發現或者在維護後重新歸隊

Service Lost

serviceup以後又丟失了

Host Discovered

一個host首次被發現或者在維護後重新歸隊

Host Lost

一個hostup以後又丟失了

 

Actions動做

zabbix全部action都是基於發現事件,例如:

發送通知

添加/移除主機

啓用/禁用主機

添加主機到組

從組中移除主機

主機link模板/unlink模板

執行遠程腳本命令

建立主機
discovery發現主機事件產生以後,接下來須要執行discovery action,在action中選擇添加主機操做、而且將主機加入某個組以及link某個模板等等。更具體操做請關注下一篇文章。那麼主機名怎麼定義呢?首先監控端(server/proxy)經過ip泛解析主機名(若是失敗了,不會從新嘗試),若是解析成功了,那麼zabbix將會使用這個主機名,不然直接使用ip地址。若是主機名相同怎麼辦?好比都叫ttlsa-server,那麼第一臺主機名會定義爲ttlsa-server,第二臺爲ttlsa-server_2,第三臺爲ttlsa-server_3,以此類推。action配置裏的條件包含設備類型、IP、狀態、uptime/downtime等等。
添加主機接口
主機接口規則以下:

服務檢測 - 例如,成功檢測到一個SNMP服務,那麼建立snmp接口

若是主機同時UIzabbix agentsnmp請求做出響應,那麼會同時建立這兩種接口

若是使用agent或者snmp做爲惟一性指標,先經過哪一個接口發現主機,那麼哪一個接口就做爲默認接口,其餘的做爲附加接口。

若是一開始只響應zabbix agent的檢測,那麼他只會建立agent接口。若是後面響應了snmp檢測,那麼他又會增長snmp接口

若是有三臺獨立的主機A\B\C,一開始使用IP地址來做爲惟一標識。能夠看到discovery有三條記錄。此時咱們修改發現規則,讓他們有相同的惟一標識。例如自定義一個keysystem.dis,這個key統一輸出值"ttlsa",這樣A的接口成了默認的,BC都變成了附加到A主機上。咱們能夠發現一個很明顯的變化。在discovery接口中依舊有3條記錄,可是"discovered device"這列顯示的A主機的接口,」monitored host「這列顯示的都是A主機的名稱,」Uptime/downtime「這列只有A主機有值,BC都爲空。從這裏咱們能看到惟一標識是多重要,若是惟一標識不是惟一,那麼有的主機會被認爲是同一臺

在瞭解了《網絡發現規則》是什麼以後,咱們開始配置。首先,咱們須要定義發現規則,用於掃描。步驟以下

 

 

 

2 自動發現(具體操做)

第一步

Configuration >>Discovery>>Create rule,編輯網絡發現規則

 

如上配置,zabbix30秒會掃描10.9.7.8810.9.32.106-107。會使用keyagent.uanme來判斷客戶端是否存在,而且以IP地址做爲惟一性的標識。

 

規則屬性

 屬性

描述

Name

規則名稱,惟一

 Discovery by proxy

   誰執行當前發現規則:
no proxy - zabbix server
<proxy name> - 指定的proxy

 IP range

發現規則中的ip範圍,格式以下
IP: 192.168.1.33
一個IP: 192.168.1.1-255
一個子網: 192.168.4.0/24
支持以下子網掩碼:
IPV4:/16 - /30
IPV6:/112 - /128
IP列表: 192.168.1.1-255,192.168.2.1-100,192.168.2.200,192.168.4.0/24
備註:1. IP列表中的IP不能重複2. 不一樣的發現規則裏面不要包含相同的IP,不然可能會出現意想不到的問題

 Delay (in sec)

規則執行完畢以後,要多久才執行下一次。

 Checks

支持的checks: SSH, LDAP, SMTP, FTP, HTTP, HTTPS, POP, NNTP, IMAP, TCP, Telnet, Zabbix agent, SNMPv1 agent, SNMPv2 agent, SNMPv3 agent, ICMP ping.
Port屬性以下:
單個端口: 22
端口段: 22-45
端口列表: 22-45,55,60-70

 Device uniqueness criteria

 設備惟一標識:
IP address - 使用IP地址做爲設備惟一性標識
Type of discovery check - 使用SNMP 或者Zabbix agentcheck做爲惟一標識

Enabled

是否啓用當前規則

 

第二步

Monitorning>>Discovery,能夠看到已經發現了兩臺主機,ip地址做爲他們的惟一標識。確保這個標識的惟一性,不然zabbix會認爲他們是一臺主機。

 

第三步

目前僅僅是能夠找到主機,並未自動添加到Host中,接下來完成幾個步驟:

1. 加入到Linux Servers

2.Linux link linux模板、windows link windows模板

3. 主機在線時長10分鐘的主機添加到HOST

4. 離線1天以上的主機從Host中移除

建立Action

咱們須要建立兩個Action,一份正對windows,一份針對Linux。咱們下面演示一下Linux服務器

Action添加主機

configuration>>action>>Event source(選discover>>create action

首先,配置名稱,以及定義消息內容,這些使用默認的便可

Action

 

條件配置

 

操做

 

回到HOST中,咱們能夠發現已經把主機加到列表裏了,而且也Linux了模板以及加到了相應的組裏

 

移除主機

configuration>>action>>Event source(選discover>>create action

首先,配置名稱,以及定義消息內容,這些使用默認的便可

移除主機

action

 

條件

 

動做

 

移除主機我就不演示了。

經過使用discoveryzabbix可以自動完成添加到host等等一系列動做,這一切都是基於這個規則來實現的。那麼若是離開這個規則,我能完成這一系列動做嗎?答案是確定的,請關注下一篇文章《Active agent自動註冊》

 

 

3 自動註冊

1. 概述

上一篇內容《zabbix自動發現配置》,大概內容是zabbix server去掃描一個網段,把在線的主機添加到Host列表中(若是是使用zabbix agent去檢測,適用於被動模式)。咱們本篇內容與上篇相反,此次是Active agent主動聯繫zabbix server,最後由zabbix server將這些agent加到host裏。對於須要部署特別多服務器的人來講,這功能至關給力。全部服務器批量裝好zabbix agentserver配置好trigger,全部的服務器都配置好了,很是快速。

2. 配置

2.1配置文件修改

指定server ip

1

2

# cat /usr/local/zabbix-2.2.2/etc/zabbix_agentd.conf | grep -E ^ServerActive

 ServerActive=66.175.222.232

修改Hostname

1

2

# cat /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf | grep -E ^Hostname                           

Hostname=auto-reg-for-ttlsa-01

關於主機名:若是zabbix_agentd.conf配置有定義Hostname,那麼zabbix會使用這個Hostname命名,不然agent的主機名(hostname得來的)

修改metadataitem

1

2

cat /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf | grep HostMetadataItem=

 HostMetadataItem=system.uname

 

2.2 配置action

步驟:configuration>>action>>Event source(選擇Auto registration>>Create Action,咱們按以下步驟來定義個action

2.2.1 action選項卡

 

定義Action名稱,以及發送消息的主題和內容,使用默認的就好了

2.2.2 Conditions選項卡

 

Host metadata包含Linux字符的主機將會觸發 2.2.3的操做,什麼是metadata,文章的下半段會專門講解。

2.2.3 operations選項卡

 

知足條件的active host發起請求,server會完成三個動做:

agent加到host列表

agent加入linux servers

agent主機link模板Template OS linux

3. 查看結果

查看/tmp/zabbix_server.log咱們能看到以下內容:

1

 16585:20150203:161110.910 enabling Zabbix agent checks on host "auto-reg-for-ttlsa-01": host became available

看到如上內容,代表host增長成功,此時此刻的host列表以下:

 

4. HostMetadataItemHostMetadata

做用:用於標示主機,經過該符號可以把主機區別開來。好比咱們常常用它來區分linuxwindows系統,這樣才能分別給他們設置組與template等等

4.1 HostMetadataItem用法

1

HostMetadataItem=system.uname

它的值來之key

4.2 HostMetadata用法

1

HostMetadata: Linux hehehehehehehehe xxxxx

他的值是直接定義的

經過使用各式各樣的metadata咱們能夠用於區分各個主機,來達到咱們各類需求。

4 zabbix low-level discover zabbix批量部署必備

1. 概述

本篇文章是zabbix發現的最後一篇,回顧一下前面幾篇文章

zabbix發現介紹》整個功能的介紹

zabbix發現配置server經過配置好的規則,自動添加hostgrouptemplate

zabbix Active agent自動註冊》與discovery相反,功能基本相同,active聯繫serverserver自動添加hostgrouptemplate

以上目的都是發現host、添加host,本文的low-level discovery更底層點,用於發現itemtriggergraph等等。咱們最經常使用如:filesystem(如//home/procC:D:等),networketh0eth1等)

 

2. Discovery之文件系統

衆多服務器,不免系統以及分區會有所不一樣。通常存在linuxwindows兩種系統,linux下分區有//data/proc等等,windowsC:D:E:等,A服務器有/data分區,B服務器可能有/site分區。他有什麼分區,我便監控什麼分區,這就是low-level discovery的功能。

2.1 建立模板

建立模板A_Template_For_Discovery,.....過程省略....

 

2.2 配置discovery規則

configuration>>templates>>找到模板「A_Template_For_Discovery>>Discovery(0)>>Create discovery rule

 

屬性說明:

Keep lost resources periodin days):數據保留天數,默認30

FileterMacro{#FSNAME}key vfs.fs.discovery」返回json數據列表,裏面內容爲{#FSNAME}做爲key//dataC:等等做爲valueregext可使用表達式,例如"^/data|/C:",若是想經過{#FSTYPE}來過濾,那麼Macro{#FSTYPE}regexp^(ext2|ext3|swap)$,或者引入zabbix中定義好的的正則表達式,@表達式名稱。關於《zabbix正則表達式》請繼續關注ttlsa

 

2.3 建立Item prototypes

其實就是一個建立一個itemconfiguration>>templates>>找到模板「A_Template_For_Discovery>>Discovery(1)>>find file system>>Item prototypes (0)>>create Item prototypes

 

 

 

 

2.4 建立Trigger

當剩餘量小於20%觸發warnning

configuration>>templates>>找到模板「A_Template_For_Discovery>>Discovery(1)>>find file system>>Trigger prototypes (0)>>Create trigger prototypes

 

與普通的trigger區別在{#FSNAME}

2.4 建立graph

繪製簡單圖表

configuration>>templates>>找到模板「A_Template_For_Discovery>>Discovery(1)>>find file system>>Graph prototypes (0)>>Create Graph prototypes

 

3. 自定義LLD規則

系統已經內建了文件系統的{#FSNAME},網絡的{#IFNAME},由於業務的特殊性,咱們如何定義咱們本身須要的名稱呢?

編寫腳本,腳本輸出json數據,包含keyvalue

腳本加入zabbix_agentd.conf UserParameter

重啓zabbix_agentd

使用定義好的名稱配置low-level discovery

3.1 腳本範例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#!/usr/bin/perl

 

$first = 1;

print "{\n";

print "\t\"data\":[\n\n";

 

for (`cat /proc/mounts`)

{

    ($fsname, $fstype) = m/\S+ (\S+) (\S+)/;

    $fsname =~ s!/!\\/!g;

 

    print "\t,\n" if not $first;

    $first = 0;

 

    print "\t{\n";

    print "\t\t\"{#FSNAME}\":\"$fsname\",\n";

    print "\t\t\"{#FSTYPE}\":\"$fstype\"\n";

    print "\t}\n";

}

 

print "\n\t]\n";

print "}\n";

3.2 結果範例

執行後獲得以下數據,是json格式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

{

        "data":[

 

        {

                "{#FSNAME}":"\/",

                "{#FSTYPE}":"rootfs"

        }

        ,

        {

                "{#FSNAME}":"\/proc",

                "{#FSTYPE}":"proc"

        }

        ,

        {

                "{#FSNAME}":"\/sys",

                "{#FSTYPE}":"sysfs"

        }

        ,

        {

                "{#FSNAME}":"\/dev",

                "{#FSTYPE}":"devtmpfs"

        }

        ,

        {

                "{#FSNAME}":"\/dev\/pts",

                "{#FSTYPE}":"devpts"

        }

        ,

        {

                "{#FSNAME}":"\/dev\/shm",

                "{#FSTYPE}":"tmpfs"

        }

        ,

        {

                "{#FSNAME}":"\/",

                "{#FSTYPE}":"ext4"

        }

        ,

        {

                "{#FSNAME}":"\/proc\/bus\/usb",

                "{#FSTYPE}":"usbfs"

        }

        ,

        {

                "{#FSNAME}":"\/proc\/xen",

                "{#FSTYPE}":"xenfs"

        }

        ,

        {

                "{#FSNAME}":"\/proc\/sys\/fs\/binfmt_misc",

                "{#FSTYPE}":"binfmt_misc"

        }

        ]

}

 

更多參考

http://blog.51cto.com/dyc2005/2178939

https://www.zabbix.com/documentation/3.4/zh/manual/discovery/low_level_discovery

 

5 zabbix自定義自動發現服務(low-level-discovery)監控系統服務

1 ) 概述

因爲工做關係好久沒有更新博客了,本文基於生產配置,是zabbix系列的另外一補充;本次要講的是zabbix Low-level discovery簡稱(LLD),咱們在配置items(監控項)時,有時須要對相似的Items進行添加,換句話說,多臺機器上的某一監控具備相似的items,如系統開放的服務,再如磁盤分區,網卡名稱等,後兩種zabbix已經自帶,今天咱們以自定義監控每一個系統開放的服務來講明 LLD的使用邏輯;
和普通items獲取不一樣的是,LLD 腳本在獲取返回時,格式必須是json形式;
和自動發現不一樣的是,自動發現經過網絡發現設備;LLD是針對主機或模板中用來自動發現定義的items和添加觸發器和圖形的;
本次測試操做基於zabbix3.4.4 本文中的相關腳本和模板下載

2 )  LLD腳本

1、獲取開放的服務
任何獲取items都要基於程序腳本,LLD發現也不例外,如下是獲取系統開放服務腳本discovery_services.sh

# cat /usr/local/zabbix-3.4.4/scripts/discovery_services.sh

 

#!/bin/bash

proarray=($(find /var/run/ -name "*.pid"  2> /dev/null||egrep -v '(rpc|php_daemon|haldaemon|irqbalance|console-kit-daemon)' |awk -F'/' '{print $NF}'|awk -F'.' '{print $1}'))    # 排除不監控的服務

 

length=${#proarray[@]}

printf "{\n"

printf  '\t'"\"data\":["

printf "\t"

printf '\n\t\t{'

printf "\"{#PRO_NAME}\":\"iptables\"}"       #必需要添加的iptables

printf  ","

for ((i=0;i<$length;i++))

do

        printf '\n\t\t{'

        printf "\"{#PRO_NAME}\":\"${proarray[$i]}\"}"

        if [ $i -lt $[$length-1] ];then

                printf ','

        fi

done

printf  "\n\t]\n"

printf "}\n"

說明:以上腳本基於 /var/run下的pid進行監控開放的服務,因此若是是公司運維人員自已經開發的管理腳本服務,pid文件請按默認的放到/var/run下 ,這樣就不會漏掉,再說大部分系統或知名程序都遵照這一規定,你爲何不能遵照呢?
在一臺監控機器上執行以下:

記住這裏的{#PRO_NAME} 這個就是自動發現規則中的宏變量;另外這個腳本返回的是json格式;

2、檢查系統狀態
對獲取的服務進行檢查

# cat /usr/local/zabbix-3.4.4/scripts/program_status.sh

 

#!/bin/bash

procjetName="${1:-NULL}"

LOCK_PATH="/var/lock/subsys"     

RUN_PATH="/var/run"

ret_ok=1

ret_critical=3

ret_unknown=4

 

if  [[ ${procjetName} == "NULL" ]] ; then

        echo ${ret_unknown}

fi

 

if [ -f "${LOCK_PATH}/${procjetName}" ] || [ -f "${RUN_PATH}/${procjetName}.pid" ]  || [ -f "${RUN_PATH}/${procjetName}/${procjetName}.pid" ] ; then

        echo ${ret_ok}

else

        echo ${ret_critical}

fi

以上腳本檢查若是服務存在則返回1 不然返回 3 ,若是服務不存在則返回
檢查的原則就是在/var/run/下是否有和服務同名的pid文件存在,或/var/run/服務/服務.pid存在,對於像iptabls這種則檢查 /var/run/subsys/服務.pid 三種狀況知足一種便可;
運行效果以下:

iptables服務檢查 返回 1說明 iptables正常
關閉iptables 再次進行檢查:

而對httpd服務進行檢查,因爲本機根本沒有httpd服務,因此返回的是3

3、定義items

# cat /usr/local/zabbix-3.4.4/etc/zabbix_agentd.conf.d/LLD_Services.conf

UserParameter=services.scan,/bin/bash /usr/local/zabbix-3.4.4/scripts/discovery_services.sh

UserParameter=services.status[*],/bin/bash /usr/local/zabbix-3.4.4/scripts/program_status.sh $1

3) 添加模板和自動發現規則

這裏須要在web頁上添加,和添加items很相似;
1、建立模板
進入web;單擊 配置--模板--配置模板--建立模板-- 這裏模板名叫 「Ickey Services status」 --建立應用集("Services_status") 如圖:

2、建立自動發現規則(LLD
如上圖點自動發現規則在模板中建立 自動發現規則 -- 建立自動發現規則 如圖:

這裏須要注意的是 鍵值: servies.scan item 是在2.3小節的配置文件中定義的,不可亂寫

再配置上圖中的過濾器 配置變量(宏)如圖:

此處的{#PRO_NAME}就是上面2.1節中腳本返回的變量; -- 保存

3、建立 配置 監控項原型 
如圖:

填寫名稱,等相關信息如圖:

此處須要注意的$1 和鍵值 是 2.3 定義items中的$1 也便是服務名; 保存;

4、建立觸發器類型
如圖:


說明:觸發器名稱:便是服務名」 is down 
表達式的意思就是 當發現某服務返回的值不是 1時發出警告
保存 這個 模板中的自動發現規則 就完成啦
可是這裏存在一個問題,當咱們機器上yum工具時,會在/var/run下生成yum.pid這樣就會偵測到一個新服務,yum,但yum執行完後yum.pid會被刪除,此時觸發器就會報yum is down,爲了解決這類問題,咱們能夠修改觸發器報警策略,修改爲以下:

意思就是,最後狀態不是1 同時一小時前的狀態是1;這樣那此在/var/run生成臨時pid的程序就不會被觸發;

接下來就是在主機上應用模板,能夠批量添加;這裏就忽略了;
5、測試
看下效果圖:


能夠看到此主機應用了模板後已經能夠拿到監控項數據了,咱們來關閉這臺主機的防火牆服務試試,看看觸發器是否正常;
如圖:

再把iptables服務啓動

能夠看到服務關閉和啓動能夠報警與恢復;至此自動發現服務已經能夠正常使用啦!經過這個實例,但願你們能理解自動發現規則的原理邏輯!本文基於生產故有些截圖帶有塗;主要用於備忘與分享,若有錯誤之處歡迎留言!

 

 

6 解決現實中文亂碼:

中文顯示亂碼 --> Windows 系統獲取字體 --> 上傳到zabbix服務器 --> 替換字體 --> 問題解決

 

windows --> 控制面板 --> 字體 --> simkai.ttf (這個字體看着順眼一些)-->上傳到zabbix_server

cd /usr/share/fonts/dejavu; mv DejaVuSans.ttf DejaVuSans.ttf.bak  # 這個字體是zabbix正在使用的字體

cp /root/ simkai.ttf /usr/share/fonts/dejavu/DejaVuSans.ttf

 

 

7 zabbix_agent playbook 批量安裝

使用playbook線上環境

相關文章
相關標籤/搜索