0%

Linux学习笔记:linux监控平台基础知识

写在前面

这则笔记主要整理linux监控平台相关知识。主要包括:

  • linux主流监控平台介绍

  • zabbix安装配置

  • zabbix使用

linux监控平台介绍

主流开源平台介绍

Zabbix

Zabbix是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源运维平台,也是目前国内互联网用户中使用最广的监控软件。它易于管理和配置,能生成比较漂亮的数据图,其自动发现功能大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户灵活进行数据采集,而分布式系统架构可以支持监控更多的设备。

Nagios

Nagios是一款开源的企业级监控系统,能够实现对系统CPU、磁盘、网络等方面参数的基本系统监控,以及SMTP,POP3,HTTP,NNTP等各种基本的服务类型。另外通过安装插件和编写监控脚本,用户可以实现应用监控,并针对大量的监控主机和多个对象部署层次化监控架构。

Nagios最大的特点是其强大的管理中心,尽管其功能是监控服务和主机的,但Nagios自身并不包括这部分功能代码,所有的监控、告警功能都是由相关插件完成的。

Ganglia

Ganglia是加州大学伯克利分校发起的一个开源集群监控项目,设计之初是用于监控数以千计的网络节点。Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统。它已被广泛移植到各种操作系统和处理器架构上。

Zenoss

Zenoss Core是Zenoss的开源版本,其商用版本为Zenoss Enterprise。作为企业级智能监控软件,Zenoss Core允许IT管理员依靠单一的WEB控制台来监控网络架构的状态和健康度。Zenoss Core的强大能力来自于深入的列表与配置管理数据库,以发现和管理公司IT环境的各类资产。Zenoss同时提供与CMDB关联的事件和错误管理系统,以协助提高各类事件和提醒的管理效率。

Open-falcon

Open-falcon是小米运维团队从互联网公司的需求出发,根据多年的运维经验,结合SRE、SA、DEVS的使用经验和反馈,开发的一套面向互联网的企业级开源监控产品。

zabbix监控平台特点

Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix组件

  • zabbix-server: 整个监控体系中最核心的组件,它负责接收客户端发送的报告信息,负责所有配置、统计数据及操作数据都由它组织。

  • 数据存储:所有的收集信息都存储在这里,比如mysql。

  • web界面:也叫web UI,这是Zabbix监控简单易用的原因之一,因为我们可以在web界面中配置、管理各个肇端 ,运行Web界面需要有php环境支持。

  • zabbix-proxy:可选组件,用于监控节点非常多的分布式环境中,它可以代替zabbix-server的功能,减轻server的压力。

  • zabbix-agent:部署在客户端的组件,用于采集各监控项目的数据,并把采集的数据传输给zabbix-proxy或者zabbix-server。

zabbix安装配置

这里准备两台虚拟机进行实验,其中

  • server端ip为172.16.155.120

  • agent端的ip为172.16.155.128

第一步:安装zabbix

  • 这里采用的是yum安装,先安装zabbix拓展源,再利用yum安装zabbix。
1
2
3
4
5
6
7
8
9
10
11
//进入源码包安装文件夹,安装包都下载到这里方便管理
cd /usr/local/src

//下载安装源
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

//安装源
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm

//安装zabbix
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

注:zabbix会连带安装httpd和php,如果本机已经安装了nginx,80端口就会被占用,后面需要在配置文件中设置一下。

  • 修改zabbix配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vi /etc/zabbix/zabbix_server.conf
//修改以下配置
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=1
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=steve-zabbix
DBSocket=/tmp/mysql.sock
DBPort=3306
StartPollers=10
StartIPMIPollers=5
StartPollersUnreachable=5
StartTrappers=5
StartPingers=5
StartDiscoverers=5
CacheSize=8M
Timeout=4
LogSlowQueries=3000
  • 保存后启动zabbix
1
systemctl start zabbix

第二步:配置nginx

这台机器是yum安装的nginx,版本号为1.12

  • 先修改httpd配置文件
1
2
3
4
5
6
7
vi /etc/httpd/conf/httpd.conf

//搜索listen,将端口改为8080

保存之后重启httpd

systemctl start httpd

  • 确认是否启动

  • 修改nginx配置文件 /etc/nginx/conf.d/*.conf;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /etc/nginx/conf.d/zabbix.conf 

//加入以下内容

server
{
listen 80;
server_name 172.16.155.120;

location /
{
proxy_pass http://172.16.155.132:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
  • 启动nginx
1
2
3
nginx -t

nginx -s reload
  • 校验状态

第三步:配置 mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
vi /etc/my.cnf

//增加如下配置内容:
character_set_server = utf8

//保存后重启服务
systemctl restart mysqld

//进入数据库
mysql -uroot -S /tmp/mysql.sock -p123456

//以下在mysql中操作,创建zabbix库
mysql> create database zabbix character set utf8;

//创建用户
mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'admin-123';

//以下操作导入数据
//首先进入server文件夹
[root@local-linux02 src]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/
[root@local-linux02 zabbix-server-mysql-3.2.11]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README

//解压压缩包
gzip -d create.sql.gz

//导入数据
mysql -uroot -p123456 zabbix < create.sql

//修改zabbix-server配置
vi /etc/zabbix/zabbix_server.conf
//修改以下内容
DBHost=127.0.0.1 //在DBname上面添加
DBPassword=admin-123 //在DBuser下面增加

//启动 zabbix-server服务
systemctl start zabbix-server
systemctl enable zabbix-server

第四步:配置web界面

在浏览器输入172.16.155.120/zabbix,按照提示点击下一步,这里遇到时区错误,解决方法是修改配置文件 /etc/httpd/conf.d/zabbix.conf,找到timezone,改为Asia/Shanghai,保存退出后,执行systemctl restart httpd重启httpd 即可。

之后继续选择下一步,Database port是0,代表mysql的默认端口3306,密码是创建zabbix用户时的密码。

安装成功后,可以是使用用户名、密码登陆看看效果。

TroubleShooting: 502 Bad Gateway

解决思路:

如上所示,连接数据库失败,zabbix'@'localhost' (using password: YES),这里给出了提示,应该是配置文件搞错了。

修改zabbix配置文件,将DBPassword改为admin-123 之后重启zabbix。

登陆后台,使用使用默认用户名admin 密码zabbix

修改系统设置更改admin登陆密码

修改完成后,点击update 刷新就可以生效

服务器端的安装暂告段落,下面开始配置客户端。

第五步:agent客户端配置

  • 安装客户端
1
2
3
4
5
6
7
8
//下载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

//安装
yum install -y zabbix-agent
  • 编辑配置文件
1
2
3
4
5
vi /etc/zabbix/zabbix_agentd.conf
//修改一下内容
Server=127.0.0.1修改为Server=172.16.155.120 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为172.16.155.120 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=zabbix-agent //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
  • 启动服务
1
2
3
systemctl start zabbix-agent

systemctl enable zabbix-agent

到这里配置基本完成。

最后补充一点,如果忘记admin密码怎么办?修改密码的方法如下:

server端进入mysql命令行进行操作

1
2
3
4
5
6
7
mysql -uroot -p

mysql> desc users;

mysql> update users set passwd=md5('steve-123') where alias='Admin';

select * from users;

完成之后,重新登陆验证一下是否成功。

zabbix使用

添加监控主机

将需要监控的主机加入监控中心,就可以监控cpu、磁盘、内存及网络等情况了。

实现步骤:

第一步:添加主机群组

  • 依次点击:配置-主机群组-创建主机群组-设置组名

  • 根据提示,输入组名 zabbix-test-groups(名字随便起),之后点击add添加

第二步:添加主机

  • 依次点击:配置-主机-创建主机

  • 按照提示填写

这里涉及的几个参数:

  • 应用集 Applications:应用集就是多个监控项的组合,比如CPU相关的应用集、内存相关的应用集,应用集里面有具体的监控项;

  • 监控项 items:监控项就是要监控的项目,比如内存使用、cpu等;

  • 触发器 triggers:触发器是针对某个监控项做的告警规则,比如磁盘使用量超过80%就触发了告警规则,然后就告警;

  • 图形 graphs:监控报表显示成图形;

  • 自动发现 discovery:zabbix特有的一个机制,会自动地去发现服务器上监控项目,比如网卡浏览就可以自动发现网卡设备并监控起来;

  • web监测 web:监控指定网站的某个URL访问是否正常,比如状态码是否为200,或者访问时间是否超过某个设定的时间段。

主动模式和被动模式

  • 被动模式,客户端开一个端口默认10050,等待服务端来取数据,然后客户端收集数据发送到服务端后结束;

  • 主动模式,客户端每隔一段时间主动向服务端发起连接请求–>服务端收到请求,查询客户端需要取的item信息,发送给客户端–>客户端收集数据发送服务端–>结束

这里的主动或被动都是针对客户端而言,两种模式各有特点:

  1. 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力;

  2. 被动模式需要客户端开一个listen端口等待服务端来拿数据,那么如果这个被监控的机器处在防火墙或是在内网中,不映射端口,服务端是没办法发送数据到这个客户端的,这时只能用主动模式;

被动模式配置

zabbix监控模板默认使用的就是被动模式,server端不需要专门配置,直接添加host

agent配置如下:

1
2
3
4
5
6
7
8
9
10
vi /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=3
Server=172.16.155.120
ServerActive=172.16.155.120
Hostname=zabbix_client
HostMetadataItem=system.uname

主动模式配置:

agent配置如下:
1
2
3
4
5
6
7
8
9
vi /etc/zabbix/zabbix_agentd.conf 

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=0
ServerActive=172.16.155.120
Hostname=zabbix_master
Include=/etc/zabbix/zabbix_agentd.d/*.conf
  • 重启zabbix:
1
systemctl restart zabbix-agent
server端配置:

克隆一个模板,把所有的类型改为Zabbix agent(Active)主动模式:

克隆模板:Configuration–》Template–》Template OS Linux(选择需要克隆的模板)–》Full clone(最下面)–》Template name:Template OS Linux Active–》Add

删除软链接模版,添加一个新的模版,克隆类型为active。另外,克隆模板成功后,记得修改类型,改为主动模式。

添加自定义模板

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

第一步:新建模版

  • 依次点击:配置-模版-创建模版,就可以创建自己的模版了,按照要求填写模版名称、可见名称、群组,最后点击添加按钮,就创建了一个自己的模版。

  • 按照提示填写后,点击apply

第二步:添加监控项

截至目前,我们自定义的模版是空白的,我们可以将需要的监控项从已有的模版当中复制过来添加进去。

复制监控项

具体来说,找到相应的模版,点击监控项,在对应的监控项左侧方框打勾选中,之后点击复制,目标类型选择模版,在弹出列表中选择之前我们自定义的模版,选中后点击复制即可。

  • 这里从templates os linux这个系统自带模版中复制出几个items来做实验。

  • 找到templates os linux双击打开,点击items,下拉就可以看到都监控哪些项目,选中以下项目,点击copy

  • 这样就添加好了,依次点击configuration、templates、items,可以看到刚才复制的4个监控项已经在这里了。

  • 同时,还可以在模版中添加触发器。所谓触发器,就是trigger,当达到某种条件,就会触发影响的操作。

  • 依次点击triggers,create triggers 创建触发器,名称填写{HOST.NAME}1分钟负载(每核),点击添加按钮,按照提示设置条件、监控项、群组、主机,

  • 点击,在弹出页面设置条件,监控项选择Processor load (1 min average per core) , functions设置为 最新的T值> N,下面的N设置为2.之后点击插入,回到触发器界面,点击添加,就成功设置了一个触发器。
链接监控项
  • 先删除之间复制的监控项

  • 按提示进行操作添加链接模版。需要注意的是,图片当中有一点忘记标注了,选择模版后,必须点击add,之后在点击update生效。

  • 然后,在steve-temp模版items界面,删除不需要的监控项就OK。

  • 如果需要删除,还是回到linked templates界面,选择unlink and clear,之后点击updates即可。

处理图形中的乱码 (服务端操作)

当系统界面设置为中文后,由于zabbix缺少中文字体,会出现无法正确显示的现象。

解决思路:zabbix的字体文件保存在/usr/share/zabbix/fonts/,文件名为graphfont.ttf,只要拷贝一个中文字体,替换原来的字体即可。

  • 第一步:从网上下载一个中文字体或者从系统文件中拷贝一个中文字体,比如简体仿宋simfang.ttf,通过rsync或者ftp上传到虚拟机/usr/local/src 目录下。

  • 第二步:备份字体文件

1
2
3
cd /usr/share/zabbix/fonts/

mv graphfont.ttf graphfont.ttf.bak
  • 第三步:制作软链接
1
ln -s simfang.ttf graphfont.ttf
  • 最后,刷新浏览器即可。

自动发现

  • 依次点击:configuration–>discovery–>create discovery rule

  • 填写信息,其他信息随便写,最关键的是监控网段

  • 重启zabbix
1
2
3
4
5
//重启服务端
systemctl restart zabbix-server

//重启客户端
systemctl restart zabbix-agent
  • 更新之后图形会出现网卡的流量图形

添加自定义监控项目

需求:监控某台web服务器的80端口并发连接数,并设置图形。

实现步骤:

  • 在zabbix-agent端编辑自定义脚本
1
2
3
4
5
6
7
vim /usr/local/sbin/estab.sh

编辑脚本内容如下:

#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • 修改脚本权限
1
chmod 755 /usr/local/sbin/estab.sh
  • 在zabbix-agent端编辑配置文件,定义监控的key
1
2
3
4
5
6
7
vim /etc/zabbix/zabbix_agentd.conf 

//增加如下配置内容:
UnsafeUserParameters=1
//使用自定义脚本
//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
  • 重启zabbix-agent服务
1
systemctl restart zabbix-agent
  • 服务端验证脚本
1
zabbix_get -s 172.16.111.110 -p 10050 -k 'my.estab.count'
  • 然后在zabbix监控中心(浏览器)配置增加监控项目

  • 键值写my.estab.count

  • 添加该项目后,到“监测中”——“最新数据”查看刚添加的项目是否有数据出现,有了数据就可以添加图形了,“配置”——“主机” ——“图形” ——“创建图形”

配置邮件告警

第一步:QQ邮箱设置

登录你的qq邮箱,设置开启POP3、IMAP、SMTP服务,开启并记录授权码。

第二步:到监控中心设置邮件告警

  • 依次点击“管理”-“报警媒介类型”-“创建媒体类型”

脚本参数:

  • {ALERT.SENDTO} :表示接收邮件地址

  • {ALERT.SUBJECT} :主题

  • {ALERT.MESSAGE} :邮件内容

第三步:创建脚本,定义脚本路径(服务端)

  • 确定告警邮件脚本应该放到哪个位置下
1
grep 'AlertScriptsPath=' /etc/zabbix/zabbix_server.conf
  • 按需求修改脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
vim /usr/lib/zabbix/alertscripts/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['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('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
if __name__ == "__main__":
main()

脚本使用说明

  1. 首先定义好脚本中的邮箱账号和密码
  2. 脚本执行命令为:python mail.py 目标邮箱 “邮件主题” “邮件内容”
  • 更改权限
1
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
  • 测试邮件发送
1
python /usr/lib/zabbix/alertscripts/mail.py aaaaaaaaaa@qq.com "agagagag" "123313434324"

第四步:创建一个接受告警邮件的用户

  • 依次“管理”,“用户”,“创建用户”,“报警媒介”,类型选择“baojing”,注意用户的权限,如果没有需要到用户组去设置权限。

第五步:设置动作

  • 依次点击“配置”,“动作”,“创建动作”,名称写“sendmail”(自定义),“操作”页面复制如下内容:
1
2
3
4
5
6
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
  • 切换到“恢复操作”,把信息改成如下:
1
2
3
4
5
6
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”;

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

测试告警

仪表板出现报错信息,邮件发送成功

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!