運維之監控zabbix
監控系統:硬件、軟件、業務指標;採樣;告警;存儲;展示;
可監控對象:
設備/軟件
設備:服務器、路由器、交換機、IO系統
軟件:OS、網絡、應用程序
偶發性小故障:
主機down機、服務不可用、主機不可達
嚴重故障:
主機性能指標
趨勢:時間序列數據
監控通道:ssh,snmp,telnet,agent,ipmi(智能平臺管理接口)等
著名的開源監控工具:
cacti:利用snmp獲取數據,然後儲存在rrd數據庫中,通過web展示出來,有較好的繪圖能力,其告警能力較差;
nagios:定義告警規則,提供告警能力;
zabbix:集合採樣,告警,存儲,展示的監控系統;
ganglia:
數據存儲:時間序列數據
1、關係型數據庫
2、輪詢數據庫rrd
3、時間序列數據庫:nosql
zabbix:LTS:2.2,3.0
特性:
1、數據採樣:snmp,ssh/telnet,agent,ipmi,jmx
a、自定義檢查機制:userparamenter
b、自定義指定時間間隔
2、實時繪圖:展示
a、graph
b、map
c、screen
d、slide show
3、告警:升級
a、script
b、notification
4、數據存儲
a、mysql
b、pgsql
5、支持模板
6、網絡自動發現
7、分佈式監控:server 《===》proxy 《===》agent
zabbix程序的構成:
zabbix_server:服務端守護進程;默認監聽端口:10051
zabbix_agentd:agent端守護進程;默認監聽端口:10050
zabbix_proxy:代理服務器,可選組件;
zabbix_get:命令行工具,手動測試向agent端發起數據採集請求;
zabbix_sender:命令行工具,運行於agent端,手動向server端發送數據;
zabbix_java_gateway:java網關;
監控配置:術語
hostgroup:主機組
host:主機,即被監控設備;
item:監控項,key+採集到數據
application:應用,即同類別的多個item所形成的組;
trigger:觸發器;表達式;
event:事件;
action:condition+operation;動作
alert:告警
media:媒介
監控設備的接口:
1、agent interface
2、snmp interface
3、jmx interface
4、ipmi interface
item:key+parameter
key:1、zabbix內建;type:agent,agent(active),snmp ...
2、自定義key;
採集到的信息種類:
字符
數值
數據類型:二進制、八進制、十進制、十六進制
store value:存儲爲
1、as is:數據不做任何處理;
2、delta(simple change):差值;即本次採樣值減去上次採樣值的結果;
3、delta(speed peer second):差值平均數;即本次採樣值減去上次採樣值的結果,然後除以採樣間隔時長;
常用的函數:nodata()、
媒介:media:
1、email:郵件
2、script:用來定義信息通道,完成信息傳遞的腳本;注意:新放入此目錄中的腳本,只有重啓zabbix-server方能被使用;
(1)腳本放置路徑:zabbix_server.conf配置文件中的參數:AlertScriptsPath=/usr/lib/zabbix/alertscripts定義
(2)zabbix會向腳本傳遞三個參數:
$1:經由此信道發送的接收目標;即send to
$2:標題;即Default Subject
$3:內容;即Default Message
3、jabber:
4、sms:短信
一次完整的監控配置:
hostgroup---》host---》[application]---》item---》trigger(events)---》(media type,user group,user)---》action
remote command:功用:
1、重啓服務
2、通過ipmi接口重啓服務器
3、任何自定義腳本可完成的功能:虛擬機遷移、清理磁盤空間等等
模板:主機配置模板;其用於鏈接至主機從而實現主機監控的快速配置;
宏(macros):類似變量,在調用時,自動替換成特定文本;分爲:內置宏{MACRO}、自定義宏{$MACRO}。命名方式:大寫字符,數字和下劃線;
級別從高到低:
主機級別:web gui---》configuration---》hosts---》macros中定義
模板級別:web gui---》configuration---》templates---》macros中定義
全局級別:web gui---》administrator---》general---》macros中定義
內置宏參考鏈接:https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location
用戶自定義key:UserParamenter;在zabbix-agent端定義,server端採集;注意,需重啓agentd服務,使自定義key生效;
語法格式:UserParamenter=<key>,<command>;定義在zabbix_agentd.conf中
實例:
1、UserParamenter=Memfree,cat /proc/meminfo | awk '/^MemFree/{print $2}'
Key爲Memfree,後面是要執行的命令,命令的執行結果爲返回值;重啓agent後方能生效,在server端使用zabbix_get命令測試獲取數據即可;
2、UserParamenter=Memusage[*],cat /proc/meminfo | awk '/^$1/{print $$2}'
Key爲Memusage,且能夠接受一個參數
由於$1,$2等要用於UserParamenter的參數調用,awk中的$2之前要多用一個$符;
在server端測試時,其調用的Key可以爲Memusage[MemFree],Memusage[MemTotal]等。
自動發現:server掃描到的主機,添加之,自動將模板連接至主機;
zabbix網絡發現的方式:
1、ip地址範圍
2、可用的服務(ftp、ssh、http...)
3、zabbix_agent的響應
4、snmp_agent的響應
自動發現分爲discovery和actions兩個階段;
a、discovery事件:host、service:discoved,lost,up,down
b、actions:根據特定的discovery事件執行響應操作;
(1)增加、刪除主機
(2)啓動、禁用主機
(3)將主機添加至組,從組中刪除主機
(4)將模板鏈接至主機,反鏈接;
一般而言,發現狀態和採取的動作:
discovered---》add host
lost---》delete host
up---》enable
down---》disable
web監控:頁面可用性及性能
觸發器表達式:
{server:key.<function>(paramenter)}<operator><constant>; 其中<constant>爲閾值;
例如:{www.lewis.com:system.cpu.load{all,avg1}.last(0)}>3
表示主機www.lewis.com上所有cpu的過去一分鐘內的平均負載的最後一次取值大於3時將觸發狀態變換;對last函數來說,last(0)相當於last(#1);
常用function的用途:
diff():比較採樣值是否發生變化,通常通過checksum進行;
min():指定區間或時間範圍內的最小值;
max():指定區間或時間範圍內的最大值;
avg():指定區間或時間範圍內的平均值;
nodata():沒採集到數據;
主動/被動檢測:相對agent而言;
被動檢測:agent,server向agent請求獲取配置的各監控項的相關數據,agent收到請求後返回數據給server;
主動檢測:agent(active),agent向server請求與自己相關的監控項配置,主動將監控項對應的數據採樣後提交給server;
基於snmp的監控:snmp(簡單網絡管理協議):
讀(get),寫(set),trap;
snmp版本:v1,v2,v3;監聽:161/UDP
linux上snmp的配置:
被監控客戶端:
# yum install net-snmp
/etc/snmp/snmpd.conf 配置文件
systemctl start snmpd.service 啓動服務
監控server端:
# yum install net-snmp-utils 命令行工具合集
例如# snmpwalk -v 2c -c public 172.20.120.40 .1.3.6.1.2.1.1
# snmpget -v 2c -c public 172.20.120.40 system.sysDescr.0
分佈式監控:server---proxy---agent;可以按業務、地域等劃分proxy;
proxy(代理):用於本區域數據收集,數據只存儲一段時間,並週期性地將數據發送給server端;
active:proxy主動連接至server端發送數據和請求配置數據;
passive:server端聯繫proxy端;
配置文件:/etc/zabbix/zabbix_proxy.conf
ProxyMode=0|1 active|passive
Server= server ip
ServerPort= server port
Hostname= proxy唯一的名字
DBHost=localhost 當定義爲localhost時,使用mysql socket通信,定義爲空值時,使用postgresql socket通信;
DBName=zabbix
DBUser=zabbix
DBPassword=
DBSocket=/tmp/mysql.sock 指明msyql socket文件路徑
DBPort=3306
HeartbeatFrequency=60 server多次監聽proxy的心跳,單位爲秒
ConfigFrequency=3600 proxy多久向server拉取自己的配置信息
DataSenderFrequency=1 proxy多久向server發送一次數據
proxy亦需要配置數據庫,需要導入數據庫,/usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz;
啓動proxy服務,# systemctl start zabbix-proxy.service
後續在web gui添加此proxy,並通過proxy監控對應主機;
zabbix監控優化:
nvps:new values per second:平均每秒接收的新的數據量;衡量的重要指標;100萬每分鐘;即約15000/s;
web gui中的administration---queue頁面顯示了數據採集的延時情況;
調優:
1、database:歷史數據不要保存太長時間;儘量讓數據集可緩存到數據庫服務器內存中;
2、觸發器表達式:減少使用min(),max(),avg();儘量使用last(),nodata();
3、數據收集:polling較慢(減少使用snmp、agent-less、agent);儘量使用trapping(agent (active));
4、數據類型:文本型數據處理較慢,儘量少收集類型爲text或string的數據,多使用類型爲Numeric的數據;
zabbix服務的配置:
1、zabbix internal類型的監控來獲知zabbix自己的狀態;
2、服務器組件數量:
alerter,discoverer,escalator,http poller,housekeeper,icmp pinger,ipmi poller,trapper,configuration syncer,db watchdog
數據庫優化:
分表:history_*,trends*,events*
centos7下:zabbix3.0安裝,結合使用mariadb數據庫;
zabbix服務端:# yum install zabbix-server-mysql mariadb-server
zabbix-web GUI:# yum install zabbix-web-mysql mariadb-server
zabbix被監控端:# yum install zabbix-agent
zabbix代理端:# yum install zabbix-proxy-mysql mariadb-server
服務端配置文件:/etc/zabbix/zabbix_server.conf;分爲4個章節:
############ GENERAL PARAMETERS #################
############ ADVANCED PARAMETERS ################
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
通用參數:
ListenPort=10051 定義數據採集的端口
SourceIP= 定義數據採集通信所使用的ip地址
LogType= 定義如何記錄日誌:system|file|console;爲指定file時,需指定其位置:LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize= 定義日誌文件的自動滾動,0-1024,單位爲M,0爲不滾動;
DebugLevel=3 定義日誌級別:0-5
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost 當定義爲localhost時,使用mysql socket通信,定義爲空值時,使用postgresql socket通信;
DBName=zabbix
DBUser=zabbix
DBPassword=
DBSocket=/tmp/mysql.sock 指明msyql socket文件路徑
DBPort=3306
示例:centos7.2+zabbix3.0+mariadb-server5.5.56
zabbix官網:https://www.zabbix.com/download
官方的repo倉庫包:zabbix-release提供下如下2個文件
1、/etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/3.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
2、/etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
zabbix服務端配置:
1、安裝zabbix
# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
2、配置mariadb數據庫
# yum install mariadb-server
# vim /etc/my.cnf 添加如下
skip_name_resolv=on
innodb_file_per_table=on
# systemctl start mariadb
# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'127.0.0.1' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
# zcat /usr/share/doc/zabbix-server-mysql-3.0.20/create.sql.gz | mysql zabbix
3、配置zabbix_server.conf
# vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix
4、配置zabbix前端web的時區
# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
5、安裝lamp,並啓動服務
# yum install php-mysql httpd
# systemctl start httpd zabbix-server zabbix-agent
6、zabbix的web GUI訪問路徑:http://172.20.120.40/zabbix,並進行後續配置;安裝完成後生成的配置文件爲:/etc/zabbix/web/zabbix.conf.php;web默認的登錄賬號密碼爲Admin/zabbix;
zabbix-agent端配置:
a、centos7
# yum install zabbix-agent
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.20.120.40 允許哪些zabbix服務端IP來連接,以逗號分隔;
ServerActive=172.20.120.40 主動向哪些zabbix服務端IP投遞數據
Hostname=node41 節點的主機名,需與web gui中的配置一致,agent主動發送數據時必須配置的;
# systemctl restart zabbix-agent.service
b、window7
https://www.zabbix.com/download_agents 下載指定的版本的agent包
修改配置文件zabbix_agentd.win.conf
Server=172.20.120.40 允許哪些zabbix服務端IP來連接
ServerActive=172.20.120.40 主動向哪些zabbix服務端IP投遞數據
Hostname=nodewin-98 節點的主機名,需與web gui中的配置一致
安裝服務,然後啓動服務;
C:\Users\Administrator>D:\zabbix_agents_3.0.10.win\bin\win64\zabbix_agentd.exe -c D:\zabbix_agents_3.0.10.win\conf\zabbix_agentd.win.conf -i
其中-i,--install:安裝成爲windows的服務;
-c,--config:指明agent的配置文件位置;
常用windows下的items參考鏈接:https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_agent/win_keys
例如:CPU使用率:# zabbix_get -s 172.20.120.98 -k "perf_counter[\Processor(_Total)\% Processor Time]"
centos7告警示例:
方式一、remote command:即通過遠程執行命令來實現告警(如重啓服務、虛擬實例遷移等);
1、前提:在agent端需要完成如下配置:
(1)、zabbix用戶有所需要的管理權限;基於sudo授權;
# usermod -s /bin/bash zabbix
# visudo /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL
1)Defaults requiretty,修改爲#Defaults requiretty,表示不需要控制終端;
2)Defaults requiretty,修改爲Defaults:nobody !requiretty,表示僅nobody不需要控制終端;
測試:# su - zabbix -c "sudo systemctl restart httpd.service"
(2)、agent進程要允許執行遠程命令;
vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1,LogRemoteCommands=1;
2、在web gui下配置action;如圖
方式二:發送告警郵件;並安裝dos2unix解決郵件告警爲附件的問題;
1、在zabbix-server端,安裝mailx並配置發件人信息
# yum install mailx -y
# vim /etc/mail.rc 在文末添加發件人信息如下
set [email protected]
set smtp=smtp.163.com set
set smtp-auth-user=username set
set smtp-auth-password=yourpassword
set smtp-auth=login
2、創建所需的alert腳本並賦予執行權限;其腳本放置路徑在/etc/zabbix/zabbix_server.conf定義,默認爲AlertScriptsPath=/usr/lib/zabbix/alertscripts
# vim /usr/lib/zabbix/alertscripts/sendmail.sh
#!/bin/bash
file=/tmp/mailtmp.txt
contact=$1
subject=$2
echo "$3" > $file
dos2unix -k $file
mail -s "$subject" "$contact" < $file
# chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh
# touch /tmp/mailtmp.txt
# chown zabbix:zabbix /tmp/mailtmp.txt
3、在web gui中配置media,並設置user,最後在action中引用來實現告警郵件的發送