运维之监控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=,;定义在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.(paramenter)};  其中为阈值;
例如:{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;如图
运维之监控zabbix_第1张图片

方式二:发送告警邮件;并安装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中引用来实现告警邮件的发送
运维之监控zabbix_第2张图片
运维之监控zabbix_第3张图片
运维之监控zabbix_第4张图片