监控系统:zabbix

 数据的采集-》存储-》报警(告警)-》展示


监控对象:包括主机,主机之间的数据流量


主机:硬件设备

  系统指标:CPU,memory io(disk磁盘io network网络io)

   cpu:sys(系统空间的比例),usr(用户空间的比例) idle

  业务指标:

SNMP:简单网络管理协议 实现网络管理 

jmx:java管理平台

tps:每秒的事务数

qps:每秒的查询书

采集:


  多保留趋势数据,历史数据只保留最近几个月的时间


存储:


关系型数据库

rrd轮询存储系统(cacti)轮转 没有对应的接口 

时序数据库:时间序列产生的密集型数据存储


influxdb



报警:(发邮件)

 写程序调用ATI服务端的接口


展示:

 展示界面


nagios:很好的告警系统,默认没有存储系统,不能进行展示

cacti:很好的展示系统,告警系统不行

zabbix:监控系统,整合了所有,接口简单直观 c语言编写 ,展示接口使用PHP

        采集:接口(agent snmp ipml imx)

        存储:mysql pgsql

        报警:email,script脚本(短信,微信) ,远程命令,报警升级

        展示:简单图 图形 screen slide show map....


grafana:作为众多的展示接口 可以作为zabbix的接口

statsd:数据采集器

promethues(适用于大规模集群系统监控)+grafana展示

graphite+grafana:


zabbix常用的术语:

       host (主机)

       host group (主机组)

       item 监控项

       trigger (触发器)

       event(事件)

       action(动作)

       escaiation(报警升级)

       media(媒介)

       notification(通知)

       remote command(远程命令)

       template(模版)

       application(应用)

       web场景(web scennario)

       frontend(前端)zabbix的web接口 

trigger(触发器):ok ,PROBLEM,event,action(remote command,alert)

监控核心:监控项

zabbix proxy 分布式监控 可一将部分监控委托出去


zabbix监控Java需要统一专门的网关来实现


实现过程:

 准备三台虚拟机:node1 node2 server

LFT[ ntpdate 172.17.0.159(server ip)

1.sever 


wget下载包

zabbix-release-3.4-2.el7.noarch.rpm  后缀为rpm要用 yum localinstall 安装

rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

//yum install zabbix-release-3.4-2.e17.noarch.rpm

yum info zabbix-agent

yum repolist

确定数据库配置正确

vim /etc/my.cnf.d/server.cnf

[server]

 skip_name_resolve=ON

 innodb_buffer_pool_size=256M

 innodb_file_per_table=ON

 max_connections=2000

 log-bin=master-log

systemctl start mariadb.service


//mysql_secure_installation  mysql安全脚本,运行后进入mysql需要密码


yum install zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent zabbix-get zabbix-sender

mysql

>create database zbxdb CHARACTER SET 'utf8 ';建立数据库

>GRANT ALL ON zdxdb.* TO 'zbxuser'@'172.17.0.%'IDENTIFIED BY 'zbxpass';

>flush privileges; 刷新授权

>exit

rpm -ql zabbix-server-mysql

cp /usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz ./

gzip -d create.sql.gz 

导入指定文件

mysql -uzbxuser -h172.17.0.159 -pzbxpass zbxdb < create.sql

mysql -uzbxuser -h172.17.0.159 -pzbxpass

>show databases;

>use zbxdb;

>show tables;

>exit

cd /etc/zabbix

cp zabbix_server.conf{,.bak}

vim zabbix_server.conf

 //grep -i "^####" zabbix_server.conf

listenport=10051

DBHost=172.17.0.159

DBname=zbxdb

DBUser=zbxuser

DBPassword=zbxpass

DBport=3306

systemctl start zabbix-server.service 启动进程

systemctl status zabbix-server.service查看状态

cd /etc/httpd/conf.d

vim zabbix.conf

vim /etc/php.ini

data.timezone=Asia/Shanghai

systemctl start httpd.service

ss -ntl 查看80端口是否开启


zabbix_get -s 172.17.0.170 -p 10050 -k "net.if.in[eno16777736,packets]"手动获取参数

浏览:

172.17.0.159/zabbix

 next step

 next step

  mysql

  172.17.0.159

  0

  zbxdb

  zbxuser

  zbxpass

 next step


172.17.0.159

  10051

  server

 next step

 next step

 finish


admin

zabbix


sign in 进入仪表盘


configuration配置

 hosts 


 hostgroups

 creat

 mysrvs


 hosts

 creat

 

node1.magedu.com

node1

mysrvs

172.17.0.170

add


Application

 creat

 cpu utils

 add

 creat

 memory stats

 add

 creat

 Network interface stats


items

creat

rate of interrupt

zabbix agent

system.cpu.intr cpu的中断次数

172.17.0.170:10050

 5s

system stats


preprocessing

 change per second 

 add


monintoring

 select

 node1

 apply

 

graph



configuration配置

 host 


action

trigger

operation




//zabbix_get -s 172.17.0.170 -p 10050 -k "system.cpu.intr"

  configuration

 templates


configuration

 hosts

 item

 rate of packets(in)

 zabbix agent

 net.if.in[eth1,packeets]

 172.17.0.170:10050

 numeric(unsigned) 

  pkts/sec

  5s

 network interface stats

 add


preprocessing

 change per second 

 add


克隆

configuration

 hosts

 items

 找到想要克隆的

 clone就可以


定义触发器:

 configuration 

  hosts

  triggers

  creat

  hight speed in pkts

  waring

  {node1.magedu.com:net.if.in[eth1,packets].last(0)}>100  //add

  add


动作:

 configuration

  actions

  action

  

  operation

   send message

 


Asministration

  users

  admin 

  media

  add

  

 local_email

 root@localhost

 add

 

  

 not classifiled   

 

tail /var/log/zabbix/zabbix_server.log 


2.node1


zabbix-release-3.4-2.el7-noarch.rpm

wget zabbix-release-3.4-2.el7-noarch.rpm

rpm -ivh zabbix-release-3.4-2.el7-noarch.rpm                       

yum repolist

yum install zabbix-agent zabbix-sender

cd /etc/zabbix

vim zabbix_agentd.conf

server=172.17.0.159

listenip=0.0.0.0

serverActive=172,17.0.159

hostname=node1.magedu.com

systemctl start zabbix-agent.service

ss -tnl


yum install redis

vim /etc/redis.conf

bind 0.0.0.0

systemctl start redis.service

ss -ntl  6379


visudo

zabbix ALL=(ALL)  NOPASSWD:ALL

# befault  requiretty


cd /etc/zabbix

vim zabbix_agent.conf

EnableRemoteCommands=1

LogRemoteCommands=1开启记录日志

systemctl restart zabbix-agent.service


*在浏览器加入redist


 configuration

  hosts

   item

   redis status

   zabbix agent

   neet.tcp.service[redis,172.17.0.170,6379]

   172.17.170.x:10050

  numeric

  5s

(new applicaition )  redis

 

 add


monitoringg

 latest data

 redis

 apply


hosts

trigger

creat

redis status down

.....

add



actions

 action

 redis service unavailable

 trigger  node1:redis service down

 add

 

 operation

  5s

  new

  5m

  1 1

  remote command

  current host

  custom script

  zabbix agent

  sudo /usr/bin/systemctl restart redis service

  add

add

  recovery

  send messages

  admin

  local_email

 add

add

  

 

vmstat 1 查看



最后展示:

自定义graph

 configuration

  hosts

node1 graph点击

  create

   interface traffic packets

    exploded/normal/stacked/pie

  item

    add  

       rate of packets(in)

       tate of packets(out)

     select

 add


monitoring

  graphs

     mysrvs node1  interface traffic packets

screens

  node1.magedu.com monitoring graphs

  2

  2

add

编辑

screens

  edit screen

  change

  

maps

 create

 map

 

模版:

configuration

 templates

 create

 template

   redis stats

   redis stats

 

db services

 

add


宏():

configuration  Actions  operation

  Default subject:

  Default message:

item 

   name redis listen status{$REDIS_PORT} 运用宏

   key  net.tcp.listen[{$REDIS_PORT}]

全局宏:

Administration

 General   Macros

{$SNMP_COMMUNITY} public

{$REDIS_PORT} 

Update


//*在server的虚拟机在 安装 redis

  yum install redis

  vim /etc/redis.conf

  bind 0.0.0.0

  systemctl start redis.service

//

zabbix

采集:agent/snmp/IPMI/jmx

  设备:主机(hosts)-->主机组(hostgroups)

        监控项(items)-->应用组(applications)

        触发器(triggers 表达式)--> trigger events

        动作(actions CONDITIONS ,OPERATIONS ,RECOVERY OPERATIONS)

          OPERATIONS:

            remote command

            send message-->USERS(media)

         media type:

 可视化:graph slide show map

 监配控制:

     术语:host group-->host -->application -->item-->trigger-->action(conditions operations)

           graph

           simple:每个item定义完成后自动生成

           customed:用于将多个item的数据整合于一个图形中展示

      items:key+parameter(参数)

         key:

          zabbix内建

           type:

             agent(server:pull)被动模式     

             agent(active) (agent:push)主动模式

              snmp v1

             .....


             用户自定义(userprameter)

采集数据:item

采集到的数据类型:

    数值:

      整数

      浮点数

    字符数:

      字符串

      文本

存储的值:

     As is:不对数据做任何处理

     Delta:(simple change) 本次采样减去前一次采样的值的结果 

     Delta:(speed per second)本次采样减去前一次采样的值,再除以经过的时长


trigger触发器:界定某特定的item采集到的数据的非合理区间或非合理状态:逻辑表达式

    逻辑表达式:阈值 ;通常用于定义数据的不合理区间

     ok:正常 状态-->叫老的zabbix版本,其为true;

     problem:非正常 状态-->较老的zabbix版本,其为true

      ok-->problem

      pecovery:problem-->ok

 

      定义触发器的依赖关系

    触发器存在可调用的函数:

       nodata()

       last()

       data()

       time()

       now()

       dayofmonth()

  触发器表达式:

    {hostname:key[paramters].function(arguments)}

    > < = # (not equal)...

   {n1.magedu.com:net.if.in[eno16777736,packets].last(#1)}>15

  trigger间存在依赖关系:

   zabbix server <--> router1 <--> host1

  事件机制:

  四种事件源:trigger discovery,auto regilstration internal


media:媒介   

    告诫信息的传递通道;

    类型:

     Email:邮件

     script:自定义脚本

     sms:短息

     jabber :

      ez texting:

    接收信息的目标为zabbix用户:

    需要用户上定义对应各种媒介通道的接收方式

  

Action:

 conditions:

  多个条件之间存在逻辑关系


展示接口:

  graph:simple custom

  screen:把多个graph整合于同一个屏幕进行展示

  map

模版:

  主机配置模版:用于连接至目标主机实现快速监控管理

     link unlink unlink and clear

  模版可继承

宏:macro 预设的文本替换模式

   级别

    全局:Administration-->general -->macros  对所有主机所有模版都有效

    模版:编辑模版-->macros 对于链接至此的主机都有效

    主机:编辑主机-->macros  只对单个主机有效

 类型:

   内建:{MACRO_name}

   自定义:{$MACRO_NAME}

    命名方式:大写字母,数字和下划线;

           

action:

      

运行测试: zabbix_get -s 172.17.0.159 -p 10050 -k "net.tcp.listen[6379]"



vim /etc/redis.conf 

tail /var/log/zabbix/zabbix_server.logs


hostnamectl set-hostname node1.magedu.com 修改主机名

ntpdate 172.17.0.xxx 同步时间

exec bash 刷新



高级用法:自定义

agent: user parameters  (key值)  能不反回字符型数值就不返回字符型数值

key的使用:

如下:

node1:

systemctl start zabbix-agent.service

iptables -F

 cd /etc/zabbix

cd zabbix_agent.d

 vim memory_usage.conf

UserParameter=memory.used,free -m | awk '/^Mem/{print $3}'

UserParameter=memory.stats[*], cat /proc/meminfo | awk '/^$1/{print $$2}'


systemctl restart zabbix-agent.service                                                                                                   


server:

systemctl start zabbix-server.service

systemctl start mariadb

systemctl start httpd

iptables -F

zabbix_get -s 172.17.0.170 -p 10050 -k "memory.used"


实例2:


1.node1

 cd /etc/zabbix

 cd zabbix_agent.d


yum install nginx php-fpm


vim /etc/php-fpm.d/www.conf


user=nginx

group=nginx

pm.status_path= /fpm-status php的状态页

ping.path= /ping

ping.response= pong


systemctl start php-fpm.service

ss -ntl 查看端口是否开启


nginx反代PHP的页面

vim /etc/nginx/nginx.conf


listen  80 default_service

location ~* \.php${

 fastcgi_pass  127.0.0.1:9000

 fastcgi_index index.php;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 include fastcgi_params;

}

      location ~* /(fpm-status|ping){

 fastcgi_pass  127.0.0.1:9000

 fastcgi_index index.php;

 fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

 include fastcgi_params

 allow 127.0.0.1;

  deny all;

   access_log off;


    }

  nginx -t

systemctl start nginx.service


172.17.0.170:80/fpm-status

本机测试:

 curl -s http://127.0.0.1/fom-status


//67:node

//  :server


创建zabbix共享

vim php-fpm.conf

UserParameter=fpm.stats[*],curl -s http://127.0.0.1/fpm-ststus | awk '/^$1/{print $$NFF}'

systemctl restart zabbix-agent.service


server:

zabbix_get -s 172.17.0.170 -p 10050 -k "fpm.stata[idle]"




network discovery:

 网络发现是zabbix最具特色的功能之一 它能够根据用户事先定义的规则自动添加监控的主机或服务等

 zabbix server扫描指定网络范围内的主机;

  发现方式:

     ip地址范围

       可用服务(ftp ssh http)

        zabbix_agent的响应

        snmp_agent的响应

    分两个阶段:

      discovery

      action:把discvery events 当作前题条件;

     发现:--》discovery events

          Service Host

     可采取的动作:

        send message remote command

        add/remove host

        enable/disable host

        add host to group

        link template to host

    .. 

Action:

  网络发现中的事件可以触发action,从而自动执行指定的操作 


配置网络发现:

 node2:68

 rpm -ivh zabbix-release-3.4-2.el17.noarch.rpm

 yum install zabbix-agent zabbix-sender

 scp -r /etc/zabbix/* 172.17.0.172:/etc/zabbix

 cd /etc/zabbix

 vim zabbix_agentd.conf

 Hostname=node2.magedu.com

systemctl start zabbix-agent.service

 ss -tnl

configuration

 Discovery

 creat

  test net

  172.17.0.170-180

  1m

check type: zabbix agent

key: system.uname

 add

 ip address

 enable

add


Actions

 Disscovery

Action

 auto add host of test.net

 

operation

  

web监控:

 监控指定的站点的资源下载速度,及页面响应时间,还有响应代码

  一个站点 ,有多个页面。

  内建key:

    web.test.in[Scenario,Step,bps]:传输速率

    web.test.time[Scenario,Step]:响应时长

    web.test.rspcode[Scenario,Step]:响应码

主动/被动 检测


    被动检测:相对于agent而言,agent server向agent请求获取配置的各监控项相关的数据,agent接收请求,获取数据并响应给server

    主动检测:相对于agent而言,agent(action)agent向server请求与自己相关监控项配置,主动的将server配置的监控项相关的数据发送给server

     agent端所需要基本配置:

       ServerActive =

       Hostname=

       HostnmaeItem=

 zabbix_sender发送数据

    zabbix server上的某主机上,直接定义item时随便定义一个不与其它已有key冲突key即可 即item 为“zabbix  trapper”;


configuration

 hosts

 web

 creat

 

基于SNMP监控

 SNMP:简单网络管理协议,基于tcp/ip 和udp协议 实现网络设备之间交换监控,或管理信息

  

   agent/nms

 

SNMP接口:     读(get,getnext)写(set)trap(陷阱);

     161/udp 端口 被监控端

     162/udp 端口 监控端

 SNMP版本:

    v1:1989

    v2:1993

    v3:1998

MIB:management Information Base


OID:Object Id

   


    网络设备:交换机,路由器

要想支持snmp先安装包,linux启用snmp的方法


1.node2:

yum install net-snmp

yum install  net-snmp-utils


管控端只需要开启snmptrapd.service

被管控端需要监控套接字只要开启 snmpd.service 



cd /etc/snmp

cp snmp.conf{,.bak}

vim snmp.conf

 view systemview included .1.3.6.1.2.1.1

 view systemview included .1.3.6.1.2.1.25.1.1 

//view systemview included .1.3.6.1.4.1.2021

// view systemview included .1.3.6.1.2.1.25.1.1

systemctl start snmp.service

测试:

snmpget -v 2c -c public 172.17.0.x 1.3.6.1.2.1.1.3.0


snmpwalk -v 2c -c public 172.17.0.x


snmpget -h 获取数据

定义ACL

 .1.3.6.1.2.1.

             1.1.0:系统描述信息

             1.3.0:监控时间

             1.4.0:系统联系人信息

             1.5.0:主机名

             1.7.0:主机提供的服务

             


             2.1.0:网络接口数目

             2.2.1.2 :网络接口的描述信息

             2.2.1.3:网络接口类型snmp

            ......

     


JMX:监控 JMX本身就可连接套结字

 tomcat主机设置

   监控tomcat

   /etc/sysconfig/tomcat 添加

CATALINA_OPTS=

 

 zabbix-java-gateway主机设置:

  安装 zabbix-java-gateway程序包 启动服务



zabbix-server端的设置:

   JavaGateway=172.17.0.x

   JavaGateway=10052

  StartJavaPollers=5


zabbix proxy的配置


1.node2:

yum install java-1.8.0-openjdk-devel    tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp 


vim /etc/sysconfig/tomcat

CATALINA_OPTS=" -Djava.rmi.server.hostname=172.17.0.172 -Djavax.management.builder.initial= -Dco.sun.management.jmxremote  

=true   -Dcom.sun.management.jmxtemote.port=12345 -Dcom.sun.managemen.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false"


systemctl start tomcat.service


ss -tnl



2.server:

 yum install zabbix-java-gateway

cd /etc/zabbix

vim zabbix_java_gateway.conf

systemctl restart zabbix-java-gateway.start


vim zabbix_server.conf

JavaGateway=172.17.0.159

JavaGatewayPort=10052

StartJavaPollers=5

systemctl restart zabbix-server.service

systemctl status zabbix-server.service




zabbix-proxy(代理):分布监控 

1.新的虚拟机

ntpdate 172.17.0.x 同步时间

hostnamectl set-hostname zbxproxxy.magedu.com 修改主机名

exec bash刷新


yum install mariadb

vim /etc/my.cnf.d/server.cnf

skip_name_resolve =ON

innodb_file_per_table = ON

innodb_buffer_pool_size= 256M

log-bin =master-log

systemctl start mariadb.service


mysql

>create database zbxproxydb character set 'utf8';

>GRANT ALL ON zbxproxydb.* TO 'zbxproxyuser'@'172.17.0.%' IDENTFIED BY 'zbxproxypass'%;授权

>flush privileges; 刷新权限


node1:

scp zabbix-release-3.4-....noarch.rpm [email protected]/root

rpm -ivh zabbix-re.....


yum install zabbix-proxy

yum install  zabbix-proxy-mysql zabbix-get zabbix-aget zabbix-sender

cd /etc/zabbix

rpm -ql zabbix-proxy-mysql

cp /usr/share/doc/zabbix-proxy-mysql-3-4.3/schema-sql.gz .

ls

zgip -d schema.sql.gz


mysql -uzbxproxyuser -h172.17.0.x -pzbxproxypass zbxproxydb < schema.sql


mysql

>use zbxproxdb;

>show tables;

>exit

cd /etc/zabbix

cp zabbix_proxy.conf{,.bak}

vim zabbix_proxy.conf

 server=172.17.0.x , 代理ip

 ServerPort=10051

 Hostname=zbxproxy.magedu.com

 listenport=10051

 EnbleRemoteCommands=1

 LogRemoteCommands=1

 DBHost=172.17.0.x

 DBName=zbxproxydb

 DBUser=zbxproxyuser

 DBPassword=zbxproxypass

 ConfigFrequency=30

 DataSenderFrequency=1

 StartPoller=5

 StartTrappers=5

 StartPingers=1

 StratHTTPPollers=1

 ServerActive=172.17.0.70,172.18.0.69

systemctl start zabbix-proxy.service

systemctl status zabbix-proxy.service


Administration

proxies

 creat

 zbxproxy.magedu.com/ ip地址

 

 add


configuration

hosts

 creat

 node2.magedu.com

 node2

 snmp hosts

 172.17.0.x   node2.magedu.com

zabbix.magedu.com


 creat item

//vim /etc/hosts

//scp /etc/hosts nodex:/etc


zabix站点服务:


 node1为例

 yum install nginx

  vim /etc/nginx/nginx.conf

  server段进行配置

   location /stub_status {

     stub_status on;

     access_log off;

 //    allow 127.0.0.1;

 //   deny all;

}

nginx -s reload 

systemctl start nginx

 cd  /etc/zabbix

  ls

  mkdir -pv /srv/zabbix/libexec

  cd /srv/zabbix/libexec

  wget  nginx.sh (浏览器上)

  cat nginx.sh

  chmod +x nginx.sh

  cd /etc/zabbix/zabbix_agentd.d

  wget  userparameter ngnx.conf (网上下载)

  

  物理机上安装:

  wget zbx_export_templates.xml(获取模版)

configuration

 templates

 creat

 选择文件zbx prox

 import

 tempates

  

  server:

  zabbix_get -s 172.17.0.x -p 10050 -k "nginx.status[active]"

 压测一下:

 ab -n 10000 -c 100 http://172.17.0.x/index.html


  

 

调优:

  Database

     历史数据不要保存太长时长

     尽量让数据缓存在数据库服务器的内存中

     触发器表达式:减少使用min() max()avg() 尽量使用last() nodata()

     数据收集:polling较慢(减少使用SNMP/agent);尽量使用trapptrapping(agent (active));

     数据类型:文本型数据处理速度较慢   尽量少收集类型为text或string 类型的数据 多使用类型为numeric的;


   

zabbix服务进程:


 (1)服务器组件的数量

    alerter discoverer  escalator http poller hourekeeper icmp pingerr ipmi pooller trapper

    configration  syncer....

     

     

 




 (2)设定合理的缓存大小



 

 

  (3)数据库优化



其他解决方案:

        grafana:展示

        collectd:收集

        influxdb:存储

  grafana+ collectd+influxdb

    prometheus:

        exporter:收集

        alertmanager

       grafana:展示

   openfalcon


Maintenance 服务维护,系统维护