Linux 监控

常见开源监控软件cacti、nagios、zabbix、smokeping、open-falcon等等cacti、smokeping偏向于基础监控,成图非常漂亮cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究后续以介绍zabbix为主

一、zabbix 监控介绍

C/S架构,基于C++开发,监控中心支持web界面配置和管理; 单server节点可以支持上万台客户端; 最新版本3.4,官方文档https://www.zabbix.com/manuals

  1. zabbix组件
    • zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据;
    • 数据存储,存放数据(如:mysql);
    • web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因;
    • zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力;
    • zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报。
  2. zabbix监控流程图
    zabbix 监控-LMLPHP

二、zabbix 安装

1. zabbix服务端部署

  • zabbix 获取:
    官网下载地址:www.zabbix.com/download获取zabbix的yum源库:wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

  • 安装zabbix:
    rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm //这个是安装zabbix的yum源仓库
    yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql //会连带安装httpd和php

  • 数据库安装设置、导入安装MySQL数据库;具体安装步骤:略
    修改MySQL默认字符集;编辑 /etc/my.cnf 增加配置 character_set_server = utf8;重启mysqld服务;
    创建zabbix库:create database zabbix character set utf8;
    创建数据库账户:grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';
    导入数据库初始数据:
    cd /usr/share/doc/zabbix-server-mysql-3.2.7
    gzip -d create.sql.gz
    mysql -uroot -pxxx zabbix < create.sql

  • 启动apache
    systemctl start httpd
    systemctl enable httpd

  • 修改zabbix配置
    vim /etc/zabbix/zabbix_server.conf //修改或增加

    	DBHost=127.0.0.1 //在DBName=zabbix上面增加
    	DBPassword=aming-zabbix //在DBuser下面增加
    
  • 启动zabbix服务
    systemctl start zabbix-server zabbix-agent
    systemctl enable zabbix-server zabbix-agent

  • 检查、测试
    netstat -lntp |grep zabbix //查看监听端口
    浏览器访问http://ip/zabbix/ web界面下面配置zabbix(用户名Admin 密码zabbix); 进入后台第一件事情就是修改密码。

2. 忘记Admin密码如何做

忘记zabbix登录密码,可对数据库账户字段更新覆盖即可;登入mysql,选择zabbix库
mysql -uroot -p zabbix//登入MySQL
update users set passwd=md5(‘newpasswd’) where alias=‘Admin’; //更新账户字段数据,即可

3. zabbix客户端部署

  • 获取yum源:wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
  • 安装yum源:·rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
  • 安装zabbix客户端程序:yum install -y zabbix-agent
  • 修改zabbix客户端配置文件:vim /etc/zabbix/zabbix_agentd.conf //修改如下配置
Server=127.0.0.1 修改为 Server=192.168.133.130 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1 修改为 ServerActive=192.168.133.130 //定义服务端的ip(主动模式)
Hostname=Zabbix server 修改为 Hostname=aming-123 //自定义的主机名,后面还要在web界面下设置同样的主机名
  • 启动客户端程序
    systemctl start zabbix-agent
    systemctl enable zabbix-agent

三、zabbix 配置使用

1. 主动模式和被动模式(主动或者被动是相对客户端来讲)

  • 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端;
  • 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可;
  • 主、被动模式适应的场景:当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力;服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式。

2. 添加主机

先添加主机组web_group;再添加主机,主机名称和可见名称都写wbe_01,群组选择web_group;IP地址填写客户端的ip。

  • 主机组:配置-->主机群组-->创建主机群组;
  • 添加主机:配置-->主机--创建主机;

3. 添加模板:可以自定义一个常用模板,方便给新增主机添加监控项目

  • 几个概念:应用集、监控项、触发器、图形、自动发现、web监测

  • 自定义web模板
    把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到web模板里

    • 方法1. 将已有的模板导出,导出的为xml文件,对xml进行编辑,然后重新导入即可;(此方法不推荐使用,可能会出现错误)
    • 方法2. 配置-->模板-->创建模板;打开创建的模板-->链接的模板-->连接指示器,选择需要借鉴的模板,然后点击添加(添加一定要点击),然后点击更新;重新打开新建的模板,选择链接的模板-->链接的模板-->取消链接(不要点击取消链接并清理);点击更新,复制完成。(建议使用此方法复制模板,去自定义)
  • 定义触发器

  • 添加图形

  • 自动发现,找到Template OS Linux,点击右侧的自动发现,参考Mounted filesystem discovery和Network interface discovery定义规则;可以直接导出、导入模板,然后再删除不需要的对象

4. 处理图形乱码

  • 问题:设置为中文后,zabbix图形的中文文字会显示小方框;
  • 解决:在windows字体库找到simfang.ttf(其实就是那个仿宋简体),路径为C:\Windows\Fonts\,,先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,并且改名为graphfont.ttf,即可。

5. 添加自定义监控项目

  • 需求:监控某台web的80端口连接数,并出图

  • 两步:

    1. zabbix监控中心创建监控项目
    2. 针对该监控项目以图形展现
  • 客户端定义脚本vim /usr/local/sbin/estab.sh //内容如下

#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • 设置权限 chmod 755 /usr/local/sbin/estab.sh
  • 客户端上编辑配置文件vim /etc/zabbix/zabbix_agentd.conf//增加
UnsafeUserParameters=1  //表示使用自定义脚本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh
  • 重启zabbix-agent服务systemctl restart zabbix-agent

  • 服务端验证,执行命令zabbix_get -s 192.168.133.132 -p 10050 -k 'my.estab.count'然后在zabbix监控中心(浏览器)配置增加监控项目,键值写my.estab.count;添加该项目后,到“监测中”“最新数据”查看刚添加的项目是否有数据出现;有了数据就可以添加图形,“配置-->主机-->图形-->创建图形”。

6. 配置告警

使用163或者QQ邮箱发告警邮件,首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务,开启并记录授权码;
然后到监控中心设置邮件告警“管理-->报警媒介类型-->创建媒体类型”。

  • 脚本参数:
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    zabbix 监控-LMLPHP

  • 创建报警脚本mail.py
    vim /usr/lib/zabbix/alertscripts/mail.py//内容参考https://gitee.com/Yue_Chen/codes/fmkg916zytdp5sboviu2080
    chmod 755 /usr/lib/zabbix/alertscripts/mail.py //设置脚本权限

  • 创建一个接受告警邮件的用户,“管理-->用户-->创建用户-->报警媒介-->类型选择“baojing”;
    注意用户的权限,如果没有需要到用户组去设置权限,设置动作,“配置-->动作-->创建动作”,名称写“sendmail”(自定义),
    “新的触发条件”,A维护状态 非在 维护,B触发器示警度>=未分类
    “操作-->消息内容”页面,内容如下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

“操作-->新的”,选择发送的用户为刚创建的用户,仅送到选择“baojing”
切换到“恢复操作”,把信息改成如下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

点击“新的-->操作”,选择发送的用户为刚创建的用户,仅送到选择“baojing”

  • 测试告警
03-06 00:52