10月18日第三十节课笔记——Linux监控平台搭建

时间:2024-05-21 20:14:03

内容摘要

  •  Linux监控平台介绍
  • zabbix监控介绍
  • 安装zabbix
  • 忘记Admin密码如何做
  • 主动模式和被动模式
  • 添加监控主机
  • 添加自定义模板
  • 处理图形中的乱码
  • 自动发现
  • 添加自定义监控项目
  • 配置邮件告警
  • 测试告警
  • 不发邮件的问题处理
  • 扩展

一、Linux监控平台介绍

监控对于网站来说是非常重要,即使是大公司由于监控做得不到位,最终会导致因为服务器的不够稳定,客户对其不够信任,而流失大量客户。

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

二、zabbix监控介绍

  •  C/S架构,基于C++开发,监控中心支持web界面配置和管理
  •  单server节点可以支持上万台客户端
  •  最新版本3.4,官方中文文档https://www.zabbix.com/manuals
  •  zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
  • zabbix有服务5个组件
  1.  数据存储 存放数据,比如mysql
  2.  web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
  3.  zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
  4.  zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报
  5. zabbix监控流程图:使用web页面来添加监控主机到监控中心,然后再对其配置监控项目。被监控的服务器和监控中心通讯了,监控中心就会采集数据并存入到数据库中。监控中心就会对采集的数据值进行判断是否达到告警的条件,再进行告警。

2018年10月18日第三十节课笔记——Linux监控平台搭建

三、 安装zabbix

安装zabbix可以直接使用yum安装,但是epel扩展源中安装的版本比较久,因此我们自己去官网上下载安装zabbix的仓库

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 服务端使用yum安装zabbix,此过程是自带安装httpd和php的: yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
  1. 其中zabbix-agent是客户端软件
  2. zabbix-get:服务端上用的工具,可以用命令行的形式获得客户端某些监控项目的数据
  3. zabbix-server-mysql:与mysql相关的一些文件
  4. zabbix-web:web ui 界面
  5. zabbix-web-mysql:web和mysql相关的
  • 安装MySQL,因为已经安装过所以省略该步骤
  • 修改mysql的配置文件,增加一行字符集:vim /etc/my.cnf

character_set_server = utf8

  • 重启mysqld服务后,进入mysql命令行,创建zabbix库:create database zabbix character set utf8;
  • 创建用户:grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix';
  • 导入原始数据:
  1. 移动到数据所在目录:cd /usr/share/doc/zabbix-server-mysql-3.4.14/
  2. 解压数据包:gzip -d create.sql.gz
  3. 导入数据:mysql -uroot -p zabbix < create.sql
  • 启动apache(需关闭nginx):systemctl start httpd
  • 设置为开机启动:systemctl enable httpd
  • 启动zabbix:systemctl start zabbix-server
  • 设置为zabbix为开机启动:systemctl enable zabbix-server
  • 检测zabbix监听端口发现服务没有起来
  • 查看zabbix日志:less /var/log/zabbix/zabbix_server.log  显示无法连接mysql

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 更改zabbix server的配置文件:vim /etc/zabbix/zabbix_server.conf
  • 指定数据库的IP:DBHost=127.0.0.1

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 添加数据库用户的密码:DBPassword=zabbix

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 重启zabbix:systemctl restart zabbix-server
  • 查看监听端口:netstat -lntp |grep zabbix

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 使用游览器在web界面配置zabbix:192.168.157.128/zabbix/

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 点击next step后查看fail的项目,这里发现PHP的timezone(时区)没有设置
  • 修改php默认的配置文件:vim /etc/php.ini

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 重启apache:systemctl restart httpd
  • 再次查看zabbix安装界面显示为OK

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 继续下一步,设置mysql相关设置

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 填写zabbix server

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 安装成功

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 填写用户名和密码 默认用户名Admin 密码zabbix

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 更改为自己的密码和语言 选择 Administration — Users — Admin 用户 —Change password和Langueage

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 修改成功

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 客户端yum安装zabbix,此过程是自带安装httpd和php的:yum install -y zabbix-agent
  • 修改客户端zabbix-agent的配置文件:vim  /etc/zabbix/zabbix_agentd.conf
  • 定义服务端的ip:Server=127.0.0.1修改为Server=192.168.157.128
  • 定义主动模式时的ip:ServerActive=127.0.0.1修改为ServerActive=19168.80.104
  • 定义主机名字:Hostname=aming-02
  • 启动zabbix:systemctl start zabbix-agent
  • 设置为开机启动:systemctl enable zabbix-agent
  • 查看监听端口:客户端为10050

2018年10月18日第三十节课笔记——Linux监控平台搭建

四、忘记Admin密码如何做

  • 连接mysql数据库:mysql -uroot -p zabbix
  • 切换至zabbix库:use zabbix;
  • 密码保存在zabbix库的users表中:desc users;

2018年10月18日第三十节课笔记——Linux监控平台搭建

  •  更改zabbix管理员密码:update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;
  • passwd=md5('newpasswd')使用md5加密 新密码为newpasswd

五、主动模式和被动模式

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

六、添加监控主机

  • 添加主机需要先创建主机群组:配置——主机群组——创建主机群组

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 创建主机群组:zhaoyujie-test

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 添加主机到主机群组:主机—创建主机 —主机名称和可见名称—选择群组—添加agent的IP地址 —添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 应用集就是监控项目的集合,即把监控项目分在多个组里

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 监控项——包括所有的监控的项目

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 触发器—— 针对某个监控项目而设定的告警规则

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 图形——把历史数据做出图表显示

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 自动发现规则—— 自动发现客户端系统的网卡流量、 文件系统、 磁盘、 分区使用情况等

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • Web监测——监控某个网站

2018年10月18日第三十节课笔记——Linux监控平台搭建

七、添加自定义模板

  • 添加自定义模:模版—创建模版—添加— 模版名字和可见的名称— 选择template— 添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 添加监控项目到自定义模版中:选择其他模版(这里用 Template OS Linux)中的某个项目—复制—选择template 的 test

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 同理可以使触发器、图形、应用集、添加主机需要的项目,但只有自动发现是不能通过此方法来添加的
  • 自动发现可以使用添加链接模板的方式实现:选择 test—链接模版—选择链接的模版—添加—更新

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 取消模版链接,删除不用监控的项目(取消链接并清理会同时把模版中的监控项目一并清理)

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 把自定义模板添加到主机上

2018年10月18日第三十节课笔记——Linux监控平台搭建

八、处理图形中的乱码

  • 查看自定义主机的图形发现乱码,原因是缺少对应的字库。这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来

 

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 在服务端编辑文件  vim /usr/share/zabbix/include/defines.inc.php   搜索ZBX_FONTPATH

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 第一行是定义字库目录的路径,路径是相对路径。绝对路径是 /usr/share/zabbix/fonts/
  • 第二行是定义字库的名字为graphfont
  • 移动到字库目录下:cd /usr/share/zabbix/fonts/
  • 查看文件发现graphfont.ttf是一个软链接文件,真正的字库在/usr/share/fonts/dejavu/DejaVuSans.ttf

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 使用xftp拷贝字库:windows的字库目录C:\Windows\Fonts  先复制一个中文字库到桌面,再上传到服务端下

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 更改原来的字库名:mv graphfont.ttf graphfont.ttf.bak
  • 改为默认字库名的软连接文件: ln -s simsun.ttc graphfont.ttf

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 回到web图形查看,显示正确。

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 添加自定义图形:图形 —创建图形 — 名称—添加监控项— 添加

九、自动发现

  • 默认的自动发信数据更新间隔为1小时,太过漫长,我们可以将它设置缩短到合理的时间内
  • 更改网卡的自动发现间隔:选择网卡的自动发现 — 数据更新间隔 1m —更新

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 重启服务端zabbix-server和客户端的zabbix-agent
  • 出现新的图形后可以将时间修改为10分钟,防止它影响性能

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

 

 

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 可以在对应链接的模板中,修改图形的一些细节:模版 —选择test模版 —自动发现 —Network interface discovery —图形原型

2018年10月18日第三十节课笔记——Linux监控平台搭建

十、添加自定义监控项目

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

  • 到客户端定义脚本: 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 

  1. 表示使用自定义脚本

UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh

  1. 自定义监控项的key键值的名称为my.estab.count
  2. 后面的[*]里面写脚本的参数,如果没有参数则可以省略,
  3. 脚本路径为/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—添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 创建对应的图表:主机 —图形 —创建图形 —填上名称 —选择对应的监控项

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 创建对应的触发器:主机 —触发器 —创建触发器 —填上名称和严重性 —添加表达式 —选择对应的监控项 —填上对应的功能和N值 —添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

十一、配置邮件告警

  • 登录163或qq邮箱 并设置 POP3、IMAP、SMTP服务,此处以163为例

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 在监控中心自定义告警:管理 —报警媒介类型 —创建媒体类型 —名称 —类型 脚本 —脚本名称 —参数 —添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 设置参数:{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
  1. 分别表示收件人、主体、内容。

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 在服务端配置文件中定义了报警邮件脚本放置的路径/etc/zabbix/zabbix_server.conf

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 编辑并创建脚本写入一下内容:vim /usr/lib/zabbix/alertscripts/mail.
  1. 内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

#!/usr/bin/env python

#-*- coding: UTF-8 -*-

import os,sys

reload(sys)

sys.setdefaultencoding('utf8')

import getopt

import smtplib

from email.MIMEText import MIMEText

from email.MIMEMultipart import MIMEMultipart

from  subprocess import *

def sendqqmail(username,password,mailfrom,mailto,subject,content):

    gserver = 'smtp.qq.com'

    gport = 25

    try:

        # msg = MIMEText(unicode(content).encode('utf-8')) //如果发送的邮件有乱码,可以尝试把这行改成如下:

        msg = MIMEText(content,'plan','utf-8')

        msg['from'] = mailfrom

        msg['to'] = mailto

        msg['Reply-To'] = mailfrom

        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)

        smtp.set_debuglevel(0)

        smtp.ehlo()

        smtp.login(username,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())

        smtp.close()

    except Exception,err:

        print "Send mail failed. Error: %s" % err

def main():

    to=sys.argv[1]

    subject=sys.argv[2]

    content=sys.argv[3]

##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)

    sendqqmail('[email protected]','aaaaaaaaaa','[email protected]',to,subject,content)

if __name__ == "__main__":

    main()

   

   

#####脚本使用说明######

#1. 首先定义好脚本中的邮箱账号和密码

#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"

  • 修改脚本权限: chmod 755 /usr/lib/zabbix/alertscripts/mail.py
  • 测试脚本:python mail.py  [email protected] "test" "test"
  • 2018年10月18日第三十节课笔记——Linux监控平台搭建
  • 监控中心处创建发送告警邮件的,用户先创建组(或者添加到已有群组),再创建用户:管理 —创建新用户 —别名 —群组—密码—语言—报警媒介—添加

2018年10月18日第三十节课笔记——Linux监控平台搭建

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 添加进现有的群组时,权限需要在群组中修改:管理—用户群组—用户所在群组—权限—选择全部—权限读写—添加—更新

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 设置动作:配置—动作—创建动作—名称写“sendmail”(自定义)——新的触发条件"维护状态非在维护"

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 设置动作:配置—动作—操作—默认信息输入如下内容:

HOST:{HOST.NAME} {HOST.IP}

TIME:{EVENT.DATE}  {EVENT.TIME}

LEVEL:{TRIGGER.SEVERITY}

NAME:{TRIGGER.NAME}

messages:{ITEM.NAME}:{ITEM.VALUE}

ID:{EVENT.ID}

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 设置动作:配置—动作—操作—新的

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 设置动作:配置—动作—恢复操作—默认信息输入如下内容

HOST:{HOST.NAME} {HOST.IP}

TIME:{EVENT.DATE}  {EVENT.TIME}

LEVEL:{TRIGGER.SEVERITY}

NAME:{TRIGGER.NAME}

messages:{ITEM.NAME}:{ITEM.VALUE}

ID:{EVENT.ID}

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 配置—动作—恢复操作—新的

2018年10月18日第三十节课笔记——Linux监控平台搭建

十二、测试告警

  • 创建一个自定义的触发器用于告警:配置—主机—需要测试的主机—触发器—创建触发器

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 系统负载,1分钟负载小于0时告警

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 查看监测:显示报警完成

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 查看邮箱:发现报警邮件

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 在把1分钟内系统负载改为大于1,解除警报。

2018年10月18日第三十节课笔记——Linux监控平台搭建

  • 收到恢复邮件:

2018年10月18日第三十节课笔记——Linux监控平台搭建

十三、不发邮件的问题处理

  • 用户权限
  • 用户媒介有没有设置邮箱
  • 发邮件脚本的权限是否755
  • 脚本的位置是否在/usr/lib/zabbix/alertscripts/下
  • 发邮件脚本是否能够发送邮件
  • zabbix配置动作是否配置正确
  • 邮箱服务器可能存在波动,更换告警的邮箱
  • 问题依然没有解决时,恢复快照尝试重新安装配置一遍

十四、扩展