運維之監控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():
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;如圖
方式二:發送告警郵件;
1、在zabbix-server端,安裝mailx并配置發件人信息
# yum install mailx -y
# vim /etc/mail.rc ? ? ? ? ? 在文末添加發件人信息如下
set from=username@163.com
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
contact=$1
subject=$2
body=$3
echo “$body” | mail -s “$subject” “$contact”
# chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh
3、在web gui中配置media,并設置user,最后在action中引用來實現告警郵件的發送
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104583