zabbix功能应用

一、zabbix简介

1、zabbix概述

  • zabbix:是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,能够监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
  • 本文中安装使用的是 version版本使用3.0,应用环境是centos7.0系统,实际应用中要使用长期维护版本LTS;

2、特性:

  • 数据采样支持协议:SNMP,agent,ipmi,jmx;
  • 报警机制:步进升级通知不同的管理人员
  • 数据存储:使用mysql/pgsql
  • 展示:php程序
    实时绘图:graph,screen,slide show,map
  • 支持监控模板
  • 网络自动发现
  • 分布式监控
  • API:支持二次开发

3、zabbix架构

监控方式有两种:

  • 主动方式:被监控端主动发送状态信息
  • 被动方式:被监控端监听一个端口,监控端发送监控请求,被监控端发送状态信息

实际应用中,被监控的主机,可以根据功能编成一个组便于监控管理

 

 
zabbix程序组件

4、zabbix程序组件

zabbix_server服务器端守护进程
zabbix_agentd :agent守护进程
zabbix_proxy:代理服务器,可选
zabbix_database:存储系统 MySQl、pgsql
zabbix_web: web gui 网页接口
zabbix_get:命令行工具,测试向agent端发起数据数据采集请求
zabbix_sender: 命令行工具,测试向server端发送数据
zabbix_java_gatway:java网关

 
zabbix逻辑组件

zabbix逻辑组件:
主机组(host groups)
主机 (hosts)
应用(application)
监控器(items)
触发器(triggers)
事件(events)
动作(actions):条件(conditions)和操作(operations)
媒介(media):发送通知的通道
通知(notifications)
远程命令(remote command)
报警升级(escalation)
模板(template)
图形(graph)
屏幕(screens)
幻灯(slideshow)

二、 zabbix的安装

通常在生产环境中zabbix的服务应该分开安装在各个服务器中;

1、环境准备

第一步、安装数据库mariadb
 [root@zabbix-12 ~]# yum -y install mariadb-server -y
 [root@zabbix-12 ~]# vim /etc/my.cnf
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
[root@zabbix-12 ~]# systemctl start mariadb.service
[root@zabbix-12 ~]# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@zabbix-12 ~]# ss -tnl
State      Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN     0      128                      *:22                                   *:*                  
LISTEN     0      100              127.0.0.1:25                                   *:*                  
LISTEN     0      50                       *:3306                                 *:*         

如果出现,登录mysql错误代码1045
[root@zabbix-12 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables   #执行完安全设定把它删掉
执行mysql的安全设定
[root@zabbix-12 ~] mysql_secure_installation

 [root@zabbix-12 ~]# mysql -uroot -p
Enter password:
MariaDB [(none)]> CREATE DATABASE zabbix CHARSET 'utf8';
Query OK, 1 row affected (0.00 sec)#创建zabbix数据库
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'192.168.%.%' IDENTIFIED BY 'zbxpass';
Query OK, 0 rows affected (0.00 sec)#远程用户授权
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'127.0.0.1' IDENTIFIED BY 'zbxpass';
Query OK, 0 rows affected (0.00 sec)#本地用户授权
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)#刷新同步
第二步、server服务器端安装
  • server端的源码安装:
[root
  • server端的yum安装:
#安装zabbix仓库源
[root@zabbix-12 ~]#  yum install http://120.52.51.14/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm -y
[root@zabbix-12 ~]#   yum clean all
[root@zabbix-12 ~]# wget http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm#下载
[root@zabbix-12 ~]# wget http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.2-1.el7.x86_64.rpm#下载
[root@zabbix-12 ~]#yum install zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm zabbix-agent-3.0.2-1.el7.x86_64.rpm

第三步、导入数据库结构

[root@zabbix-12 ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.2/
[root@zabbix-12 zabbix-server-mysql-3.0.2]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@zabbix-12 zabbix-server-mysql-3.0.2]# gzip -d create.sql.gz解压缩
[root@zabbix-12 ~]# mysql -uzbxuser -h127.0.0.1 -pzbxpass zabbix  < /usr/share/doc/zabbix-server-mysql-3.0.2/create.sql #导入数据库结构
[root@zabbix-12 ~]# mysql -uzbxuser -h127.0.0.1 -pzbxpass
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [zabbix]> SHOW TABLES;   查询导入的表
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
| application_discovery      |
| application_prototype      |
| application_template       |
| applications               |
| auditlog                   |

注意:zabbix2*版本的sql要按顺序导入三个

第四步、配置文件

  • 程序环境:
    配置文件: /etc/zabbix/zabbix_server.conf
    unit file: zabbix-server.service
[root@zabbix-12 ~]# cd /etc/zabbix/
[root@zabbix-12 zabbix]# ls
zabbix_server.conf
[root@zabbix-12 zabbix]# cp zabbix_server.conf{,.bak}   备份配置文件
[root@zabbix-12 zabbix]# ls
zabbix_server.conf  zabbix_server.conf.bak
[root@zabbix-12 zabbix]# grep "^####" zabbix_server.conf   查找配置文件配置段

############ GENERAL PARAMETERS #################  通用参数
############ ADVANCED PARAMETERS ################ 高级参数
####### LOADABLE MODULES #######                  可装载模块
####### TLS-RELATED PARAMETERS #######              通信相关,可设置ssl加密

通用配置参数:
ListenPort=10051  监听端口
SourceIP=        源ip,允许那个ip监听
LogType=file      日志类型,默认存到文件
LogFile=/var/log/zabbix/zabbix_server.log  日志存储目录
LogFileSize=0      禁止滚动存储
DebugLevel=3     日志详细级别 默认为3正常级别

DBHost=192.168.1.12  授权数据库主机
DBName=zabbix    授权数据库名字
DBUser=zbxuser   授权数据库用户
DBPassword=zbxpass  授权用户密码
DBPort=3306        数据库默认端口
DBSocket=/var/lib/mysql/mysql.sock  程序接口位置
 
mysql程序接口位置

 

 
注意版本问题
[root@zabbix-12 zabbix]# systemctl restart zabbix-server.service #启动zabbix服务

第五步、zabbix web安装

搭建一个lamp环境

1)[root@zabbix-12 ~]# yum install httpd php php-mysql php-mbsting php-gd php-bcmath php-ldap php-xml -y

(2)下载安装包

[root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-mysql-3.0.2-1.el7.noarch.rpm

[root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-3.0.2-1.el7.noarch.rpm

(3)安装web gui

[root@zabbix-12 ~]# yum -y install zabbix-web-mysql-3.0.2-1.el7.noarch.rpm zabbix-web-3.0.2-1.el7.noarch.rpm

(4)配置php时区参数

  方法一:编辑php.ini

  方法二:[root@zabbix-12 ~]# vim /etc/httpd/conf.d/zabbix.conf

....................

 php_value date.timezone Asia/shanghai

....................

 (5)启动web

[root@zabbix-12 ~]# systemctl start httpd

[root@zabbix-12 ~]# ss -tnl

State Recv-Q Send-Q Local Address:Port Peer Address:Port             

LISTEN 0 128 *:22 *:*                 

LISTEN 0 100       127.0.0.1:25 *:*                 

LISTEN 0 50 *:3306 *:*                 

LISTEN 0 128 :::80                         :::*
 
测试浏览

 

 
数据库相关信息

 

 
可选操作
 
生成的配置文件

安装后生成的配置文件:/etc/zabbix/web/zabbix.conf.php

登录管理员:

admin/zabbix(建议修改,不用默认)

 
主界面

(6)主菜单

Monitoring监控
Inventory主机列表
Reports报告
Configuration 设置
Administration 管理

第六步、zabbix配置被监控主机

1、下载安装
 [root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.2-1.el7.x86_64.rpm 
[root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-sender-3.0.2-1.el7.x86_64.rpm 
[root@zabbix-12 ~]# yum -y install zabbix-sender-3.0.2-1.el7.x86_64.rpm zabbix-agent-3.0.2-1.el7.x86_64.rpm
2、程序环境
配置文件:/etc/zabbix/zabbix_agentd.conf
unit file: zabbix-agent.service
3、配置
[root@httpd1-73 zabbix]# grep -i "^####" zabbix_agentd.conf 
############ GENERAL PARAMETERS #################
##### Passive checks related  被动监控相关配置
##### Active checks related   主动监控相关配置
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS ####### 用户自定义的监控参数,使用UserParamter
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
其中:
##### Passive checks related  被动监控相关配置

server=IP1,IP2,.....  允许那台主机采样
ListenPort=10050   监听端口
ListenIP=0.0.0.0     监听本机所有可用地址
StartAgents=3       响应预先发送的进程数量

##### Active checks related   主动监控相关配置
ServerActive=IP1,IP2  主动报告到主机的ip
Hostname=Zabbix server   被监控主机名
[root@httpd1-73 zabbix]# systemctl start zabbix-agent #启动代理服务
[root@httpd1-73 zabbix]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port                        
LISTEN     0      128                         :::10050                          

三、监控项配置

1、监控项配置流程

  • 先添加host主机组--》host主机---》applications应用--》item监控项-->trggers(evens)触发(事件)-->action(condtions,operations)动作(状况、操作)
  • 其中oprerations操作:remote通知、 command传递命令、alert报警

2、展示图表定义:

item监控项,可以定义一个simple graph图表(里面只有一个监控项形成的图表)
多个items监控项可以定义一个graph图表(里面有多个监控项形成的图表)
多个graphs可以定义一个screen屏幕(里面有多个图表形成的一个集合屏幕)
多个screens可以定义一个slide show幻灯片(周期性播放多个屏幕)

3、快速配置一个监控项

先用命令测试监控项

[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.cpu.switches"
509479   #获取被监控主机cpu上下文
  • (1)、添加主机组和主机
 
创建主机组

 

 
设置

 

 
添加完成
  • (2)、添加监控项
    监控数据类型:监控原数据、监控变化数据、监控变化数据速率
 
选择被监控主机
 
点击创建监控项

 

 
设置监控项

 

 
在监控菜单中查看此监控项的最新数据

4、item key

  • 功能:代替监控主机在被监控主机执行命令
  • item key 有两类:zabbix內建 key 的和自定义 key
  • 监控模式有:
    • zabbix_agent 被动监控模式
    • zabbix_agent activ 主动监控模式
(1)zabbix內建的key
 
zabbix內建的key里面 带中括号可以传递参数,可选的;带尖括号的是必选的

 

 
示例

对应key手动测试

[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.in[ens33,packets]"
3569  #获取被监控主机网卡流入报文数量
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.in[ens33,bytes]"
297837  #获取被监控主机网卡流入字节数
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.out[ens33,bytes]"
294036 #获取被监控主机网卡流出字节数
 
克隆方式创建item
 
克隆方式的item,方便快捷
(2)用户自定义key(UserParamter)

采集到的数据类型
数值:整数浮点数
字符型:字符串、text、log
储存值:
AS is:不对数据做任何处理,存储采集到的数据本身;
Delta(simple change): 本次采样的数据减去前一次采样的数据;
Delta(speed per second):本次采样的数据减去前一次采样的数据,再除以经过的时长;速率数据;

5、定义触发器Triggers

状态转换:

正常ok----》问题-problem
问题-problem--》正常ok

逻辑表达式,阈值,通常用于定义数据的不合理区间;条件满足时,true,表示problem状态,反之,则ok状态
基本触发器表达式格式:
{<server>:<key>.<functon>(<prrameter>)}<operator><constant>
触发器之间的依赖关系

 

 
创建触发器

 

 
选择被监控主机

 

 
定义参数和阈值

 

 
触发器生成对应语句,seventy是报告等级左边最低

 

 
当前状态

6、媒介类型(Media Types)

媒介是报警信息的传递方式:

  • 类型:
    email:邮件,需要定义发件人邮箱地址和SMTP服务
    script:自定义脚本,此脚本有发送信息至相关用户的功能
    SMS,JABBER,EZ TEXTING 只有北美由此服务

  • 接受通知信息者为zabbix的用户:需要用户定义对应各种媒介通道的接收方式:localmail本地邮件、script脚本


     
    邮件媒介设置
 
设置邮件收件箱

7、定义动作action

  • conditions:触发此动作的条件,一般通过“事件”触发
  • operations:触发条件满足时要采用的动作
  • send message:发报警信息给关联的用户;
    (1) 可传递方式: email邮件方式和script 报警脚本方式
    (2)script 报警脚本位于server主机的AlerScriptPath参数定义的目录下,默认为/usr/lib/zabbix/alertscripts
    zabbix 调用脚本时会向其传递参数,3.0之前的版本通过
                   $1:消息接收人
                   $2:消息主题
                   $3:消息主体
     3.x之后的版本,此三个参数默认不再传递,需自行定义;
                    {ALTET.SENDTO}
                    {ALTET.SUBJECT}
                    {ALERT.MESSAGE}
    

注意:每个信息接收人相对于此媒介来说,得配置相应的接收地址;

[root@zabbix-12 ~]# vim /usr/lib/zabbix/alertscripts/sendmail.sh  #定义一个邮件脚本

#!/bin/bash
#
contact=$1     #收件人
subject="$2"    #消息主题
body="$3"  #消息主体

echo "$body" | mail -s "$subject" "$contact"
[root@zabbix-12 ~]# systemctl restart zabbix-server
 
使用邮件脚本

 

 
设置收件地址

 

 
添加媒介

 

 
此用户有两个接收邮件途径

remote command远程命令

功能:无人工介入处理
在agent所在的主机上运行用户指定的命令或脚本来尝试着恢复故障:例如重启服务,任何用户自定义的脚本

类型ipmi
custom script
ssh
Telnet
global script

其中custom script实现的前提:
(1)在agent端配置:

编辑/etc/sudoers文件,添加
        zabbix ALL=(ALL)NOPASSWD:ALL
注释如下行:Defaults requiretty

(2)agent进程要允许执行远程命令,编辑/etc/zabbix-agentd.conf文件,设置EnableRemoteCommands=1
(3)重启zabbix-agent生效

 

 
创建动作
 
添加一个触发器
 
选择ssh方式执行命令

 

 
设置第二步执行重启命令

 

 
设置第三步发送邮件到本地用户邮箱

示例:定义监听web服务器80端口,当80端口监控不到时,重启被监控主机的httpd服务

 
选择主机并设置监控项,设置监控端口

 

 
创建触发器

 

 
添加监控项

 

 
设置触发值

 

 
定义触发等级

 

 
创建一个动作

 

 
设置邮件格式

 

 
添加触发条件

 

 
第一步执行重启命令

 

 
第二步发送邮件

 

当被监控服务器httpd服务停止时候,启动触发器

 
触发器被启动

 

 
而后生成一个事件

8、定义图表Graphs

 
在主机中选择图表

 

 
创建图表

 

 
设置图表样式、数值类型、大小等

 

 
添加一个监控项
 
预览创建图表

9、screen屏幕

当创建多个graphs 就可以组建一个screen

 
创建屏幕

 

 
定义屏幕

 

 
选择被监控的主机

 

 
点击编辑

 

 
添加图表
 
生成一个屏幕

10、幻灯片slideshow

 
创建幻灯片

 

 
设置每屏轮换时间并添加屏幕

 

 
生成幻灯片

四、配置模板

  • 模板:主机配置模板,可连接至主机,从而实现主机的快速监控配置
  • 模板特性:可继承、在模板之上link其他模板即可使用。

1、创建自定义模板

 
创建自定义模板
 
定义模板
 
生成一个test模板

 

 
分别设置应用、事件等

2、模板的使用

(1)添加主机host

 

 
添加主机host

(2)选择模板

 

 
选择模板

模板的导入和导出

 

 
生成监控

(3)模板的继承

 

 
模板的继承

 

 
模板被继承

(4)从主机上删除模板
UNlink:反连接
UNlink and clear:反链接并清除数据

 

 
模板的删除

(5)模板可以导出,也可以从指定的文件导入

五、宏:MACRO

功能:预设的文本替换模式;

1、宏的级别:
  • 全局宏;Administraton-->General-->Macros
  • 模板宏;Configuration-->Templates-->Template-->Macros
  • 主机宏;先被查找,优先级最高Configuration-->Hosts--->HOST--->Macros


     
    全局宏使用

     
    模板宏使用
 
主机宏使用
 
宏在item中的使用

2、宏的类型:

內建:{MACRO_NAME}
自定义:{MACRO_NAME }要加
命名方式:大写字母、数字和下划线

六、网络发现

功能:zabbix server扫描指定网络范围内的主机
1、发现方式;ip地址范围
2、可用服务探测(ftp、ssh、http)
zabbix_agentd的响应对某个key的请求;
snmp_agent响应;
一旦发现某主机,就不会产生发现事件
3、事件有8类: 分别是 host、service的up、down、discovered、lost的组合;例如:hostup、hostdown
4、发现操作分两步:

discover发现阶段
actions:动作阶段
conditions条件:发现主机
operations操作:添加主机
可采取的动作:
send message发送邮件,remote command传送命令
add/remove host 添加或删除主机
enable/disable host 使用或不使用主机
link template to host 对主机使用模板

 
创建网络发现

 

 
设置网络发现规则

 

 
生成网络发现

 

 
选择网络发现,创建一个动作
 
定义发现主机

 

 
添加监控模板

 

 
生成一个网络发现动作

 

 
测试

 

 
测试

七、zabbix的自定义key

自定义key:在zabbix agent端的配置文件中由用户通过UserParameter指令
定义用户自定义参数;

格式 UserParamter=<key>,<command>
     UserParamter=<key>,<*>, <command>$1......$9
注意:类似awk命令自带$1...$9,需要改写为$$1.$$2.......$$9:

1、获取被监控主机内存空闲值示例

在被监控主机上

[root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
### Option: UserParameter
UserParameter=system.memory.free,awk '/^MemFree/{print $2}' /proc/meminfo获取内存空闲值
[root@httpd1-73 ~]# systemctl restart zabbix-agent.service

在监控主机上测试
[root@zabbix-12 ~]# systemctl start httpd
 [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.free"
742672
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.free"
742704
 
image.png

 

 
image.png

2、获取被监控主机内存数值示例

在被监控主机上
[root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
### Option: UserParameter
UserParameter=system.memory.usage[*],awk '/^$1/{print $$2}' /proc/meminfo传递内存数值[root@httpd1-73 ~]# systemctl restart zabbix-agent.service

在监控主机上测试
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemFree]"  #空闲内存空间
741408
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemTotal]" #内存总量
999696
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemAvailable]"#可用内存空间
728700

还可以传递其他参数。

3、读取被监控主机nginx状态示例

被监控主机上
安装nginx
编辑配置文件
[root@httpd1-73]# vim /etc/ nginx/nginx.conf
server {
.................
location /ngxstatus {
             stub_status;
          }  #编辑状态信息
...................
[root@httpd1-73 ~]# systemctl start nginx  #启动nginx
[root@httpd1-73 ~]# curl 192.168.1.73/ngxstatus #获取状态信息
Active connections: 1 
server accepts handled requests
 7 7 4 
Reading: 0 Writing: 1 Waiting: 0
[root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.status.active,curl http://localhost/ngxstatus | awk '/^Active/{print $3}' #自定义获取active的key
[root@httpd1-73 ~]# systemctl restatt zabbix-agent


在监控主机上测试
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status.active"
1

4、编写监控nginx状态的key脚本示例

在被监控主机上:
[root@httpd1-73 ~]# vim /usr/bin/ngxstatus.sh编写脚本
#!/bin/bash
#
host='127.0.0.1'
port='80'
statusurl='/ngxstatus'
active() {
         curl -s http://${host}:${port}${statusurl} | awk '/^Active/{print $3}'
        }
accepts() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $1}'
}
handled() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $2}'
}
requests() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $3}'
}
reading() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $2}'
}

writing() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $4}'
}

waiting() {
         curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $6}'
}

$1
[root@httpd1-73 ~]# ngxstatus.sh accepts   #bash测试
139
[root@httpd1-73 ~]# ngxstatus.sh active
1
[root@httpd1-73 ~]# ngxstatus.sh waiting
0
[root@httpd1-73 ~]# ngxstatus.sh reading
0
[root@httpd1-73 ~]# ngxstatus.sh handled
145
[root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑
.................
UserParameter=nginx.status[*],/usr/bin/ngxstatus.sh $1  #[*]接受多个参数
在监控主机上测试:
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status[active]"
1
[root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status[accepts]"
170
 
创建对应脚本的监控项

 

 
生成监控项

 

 
生成图表

5、编写监控PHP状态的key脚本示例

安装php-fpm
编辑配置文件

[root@httpd1-73 ~]# vim /etc/php-fpm.d/www.conf
pm.status_path = /fpmstatus
ping.path = /ping
ping.response = pong
[root@httpd1-73 ~]# systemctl start php-fpm  #启动php

因为php是fastCGI协议,监控获取信息必须由nginx反代即可
所以编辑nginx配置文件:
[root@httpd1-73 ~]# vim /etc/nginx/nginx.conf
server {
.............
        location ~* ^/(fpmstatus|ping)/?$ {      #如果客户请求fpmstatus则传递参数
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
            include   fastcgi_params;
          }
.............
[root@httpd1-73 ~]# nginx -t
[root@httpd1-73 ~]# nginx -s reload
[root@httpd1-73 ~]# curl http://127.0.0.1/fpmstatus
pool:                 www
process manager:      dynamic
start time:           31/Aug/2018:10:46:07 +0800
start since:          2604
accepted conn:        1
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 1
max children reached: 0
slow requests:        0

八、主动和被动监测

  • 被动监控:被监控主机agent监听一个指定端口,由监控主机zabbixserver发来item请求清单,被监控主机返回清单中的数据。
  • 主动监控:被监控主机agent监听一个指定端口,周期性的主动向监控主机zabbixserver发送item中的数据。
    serverActive的设置
    hostname的设置

1、基于snmp监控

简单网络管理协议,是udp协议
snmp版本有v1、v2、v3,其中v3是最安全的
工作模式:读(get,getnext)端口161/udp
写(set)端口162/udp
陷阱(trap)
snmp获取命令snmpget,snmpgetnext,
snmpwalk一次获取多个信息
snmptrap 捕获命令
OID对象标识符:Object ID
MIB:Management Information Base

2、使Linux主机支持snmp

[root@httpd2-74 ~]# yum install net-snmp net-snmp-utils -y  #安装snmp
[root@httpd2-74 ~]# vim /etc/snmp/snmpd.conf            #编辑snmp配置文件

 
[root@httpd2-74 ~]# systemctl start snmpd.service启动
[root@httpd2-74 ~]# ss -unl
State       Recv-Q Send-Q                          Local Address:Port                                         Peer Address:Port              
UNCONN      0      0                                           *:161                                                     *:*
[root@httpd2-74 ~]# snmpwalk -c public -v 2c 192.168.1.74 .1.3.6.1.2.1.1.1  #-c使用public密码-v使用2c版本读取.1.3.6.1.2.1.1.1级别的信息
SNMPv2-MIB::sysDescr.0 = STRING: Linux httpd2-74 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
[root@httpd2-74 ~]# snmpwalk -c public -v 2c 192.168.1.74 sysName   #使用字段获取信息
SNMPv2-MIB::sysName.0 = STRING: httpd2-74
 
snmp配置文件
 
监控主机上,添加被监控主机的snmp接口
 
添加基于snmp监控模板

九、zabbix的分布式监控

1、架构

Zabbix proxy是在大规模分布式监控场景中,采用的一种用以分担server端压力的分层结构,Proxy只负责一定区域内的数据采集工作,然后定期将数据一次性发送给server,极大的减轻了server的负载压力,使得可以支持更大规模的监控需求.

 

 
zabbix-proxy模式

2、代理服务器

(1)安装数据库
[root@zabbix-proxy21 ~]# yum -y install mariadb-servera#安装数据库
[root@zabbix-proxy21 ~]# vim /etc/my.cnf
[mysqld]
.........
innodb_file_per_table = ON
skip_name_resolve = ON
..........
[root@zabbix-proxy21 ~]# systemctl start mariadb启动
(2)安装代理安装包
wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/{zabbix-get-3.0.2-1.el7.x86_64.rpm,zabbix-proxy-mysql-3.0.2-1.el7.x86_64.rpm,zabbix-agent-3.0.2-1.el7.x86_64.rpm}  #下载安装包

[root@zabbix-proxy21 ~]# yum -y install *.rpm   #安装程序包
[root@zabbix-proxy21 ~]# grep "^####" /etc/zabbix/zabbix_proxy.conf   #查询配置文件
############ GENERAL PARAMETERS #################
######### PROXY SPECIFIC PARAMETERS #############
############ ADVANCED PARAMETERS ################
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######

(3)配置

[root@zabbix-proxy21 ~]# rpm -ql zabbix-proxy-mysql
.....
/usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz  #数据库生成脚本
......
[root@zabbix-proxy21 ~]# cp /usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz  /root
 [root@zabbix-proxy21 ~]# gzip -d schema.sql.gz  #解压缩脚本
[root@zabbix-proxy21 ~]# mysql #连接数据库
MariaDB [(none)]> CREATE DATABASE zabbix_proxy CHARSET 'utf8';  #生成数据库
MariaDB [(none)]> GRANT ALL ON zabbix_proxy.* TO 'zbxproxy'@'192.168.%.%' IDENTIFIED BY 'zbxpass';  #数据库远程授权
MariaDB [(none)]> GRANT ALL ON zabbix_proxy.* TO 'zbxproxy'@'127.0.0.1' IDENTIFIED BY 'zbxpass'; #数据库本地授权
MariaDB [(none)]> FLUSH PRIVILEGES;#刷新

[root@zabbix-proxy21 ~]# mysql -uzbxproxy -h192.168.1.21 -pzbxpass zabbix_proxy  < schema.sql  #执行导入脚本
[root@zabbix-proxy21 ~]# mysql -uzbxproxy -h192.168.1.21 -pzbxpass #查看生成相关表
MariaDB [zabbix_proxy]> SHOW TABLES;

[root@zabbix-proxy21 ~]# vim /etc/zabbix/zabbix_proxy.conf #编辑配置文件
Server=192.168.1.12监控主机ip地址,不是本机地址
Hostname=zabbix-proxy21主机名

DBHost=192.168.1.21数据库地址(本机ip)
DBName=zabbix_proxy数据库名
DBUser=zbxproxy数据库用户名
DBPassword=zbxpass数据库密码

HeartbeatFrequency=60心跳检测间隔时间
ConfigFrequency=3600配置推送间隔时间
DataSenderFrequency=1发送数据到主监控服务器时间间隔,默认1秒

[root@zabbix-proxy21 ~]# systemctl start zabbix-proxy  #启动
[root@zabbix-proxy21 ~]# ss -tnl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port                     
LISTEN      0      128       *:10051                 *:*    
(4)在server端添加此proxy
Administrator----> proxles
 
创建代理服务器

工作模式:
Active:Proxy主动向server发起配置信息同步请求;
Passive: 由server端向Proxy发送配置信息;

(5)添加hosts时,选择使用指定的proxy进行监控;
 
添加新被监控主机
 
选择连接代理监控服务器
 
生成监控

注意:

(1)在server添加的proxy的名称,要与proxy的配置文件中的Hostname的值保存一致。
(2)通过proxy监控的主机,agent要授权proxy有监控权限;
   server=Proxy_Server_IP

十、zabbix的优化

  zabbix performance tuning
nvps:New Value Per Second
  100w/m     15000/s

1、zabbix服务器进程数量调整

配置文件中:StartPollers=5
alerter报警进程
discover 网络发现进程
escalator报警升级进程
http poller web监控进程
housekeeper 管理历史数据清理
poller 监控数据进程,实际应用中要调整大一些
trapper 被动模式下,要调整大一些
configration syncer 配置同步,一般不用调整
ipmi poller

2、进程数量调整

StartPollers=50
StartPingers=10
StartDBSyncers=2

3、数据库优化:

分表:history_历史相关和表需要分表
trend
 趋势相关的表需要分表
events*事件相关的表需要分表

4、监控建议

  • Database :历史数据不要保存太长时间;尽量让数据缓存数据库服务器内存中
  • 触发器的表达式:减少使用min()、max()、avg();尽量使用last(),nodata();
  • 数据收集:polling较慢时,减少使用snmp/agentless/agent,尽量使用trapping方式,即agent(active);
  • 数据类型:文本型数据处理速度较慢,尽量少收集类型为text或string或log型的数据,多使用numeric型数据;
posted @ 2020-01-11 16:24  老虎死了还有狼  阅读(820)  评论(0编辑  收藏  举报