第三十课预习任务
1.Linux监控平台介绍
网络和系统监控是一个很宽的范畴。有监控服务器、网络设备、应用正常工作的方案,也有跟踪这些系统和设备性能,提供趋势性能分析的解决方案。有些工具像个闹钟一样,当发现问题的时候就会报警,而另外的一些工具甚至可以在警报响起的时候触发一些动作。这里,收集了一些开源的工具,旨在解决上述的一些甚至大部分问题。
Cacti是一个性能广泛的图表和趋势分析工具,可以用来跟踪并几乎可以绘制出任何可监测指标,描绘出图表。从硬盘的利用率到风扇的转速,在一个电脑管理系统中,只要是可以被监测的指标,Cacti都可以监测,并快速的转换成可视化的图表。
Nagios是一个经典的老牌系统和网络监测工具。运行速度快,可靠,需要针对应用定制。Nagios对于初学者是一个挑战。但是它的极其复杂的配置正好也反应出它的强大,因为它几乎可以适用于任何监控任务。要说缺点的话就是不怎么耐看,但是其强劲的功能和可靠性弥补了这个缺点。
Icinga 是一个正在重建的Nagios的分支,它提供了一个全面的监控和警报的框架,致力于设计一个像Nagios一样的开放和可扩展性的平台。但是和Nagios拥有不一样的Web界面。Icinga 1 和 Nagios非常的相近,不过Icinga 2就重写了。两个版本都能很好的兼容,而且,Nagios用户可以很轻松的转到Icinga 1平台。
NeDi可能不如其他的工具一样闻名全世界,但它确是一个跟踪网络接入的一个强大的解决方案。它可以很流畅的运行网络基础设施和设备目录,保持对任何事件的跟踪。并且可以提供任意设备的当前地点,也包括历史地点。
NeDi可以被用于定位被偷的,或者是丢失掉的设备,只要设备出现在网络上。它甚至可以在地图上显示所有已发现的节点。并且很清晰的告诉人们网络是怎么互联的到物理设备端口的。
Observium 综合了系统和网路监控,在性能趋势监测上有很好的表现,它支持静态和动态发现来确认服务器和网络设备,利用多种监测方法,可以监测任何可用的指标。Web界面非常的整洁,易用。
就如我们看到的,Observium也可以在地图上显示任何被监测节点的实际地点。需要注意的是面板上关于活跃设备和警报的计数。
Zabbix 利用一系列的工具监测服务器和网络。Zabbix的监控代理支持大多数的操作系统,你可以被动的或者是使用外部检查,包括SNMP来监控主机和网络设备。你也会发现很多提醒和通知设施,和一个非常人性化的Web界面,适用于不同的面板,此外,Zabbix还拥有一些特殊的管理工具来监测Web应用和虚拟化的管理程序。
Zabbix 还可以提供详细的互联图,以便于我们了解某些对象是怎么连接的。这些图是可以定制的,并且,图也可以以被监测的服务器和主机的分组形式被创建。
Ntop是一个数据包嗅探工具。有一个整洁的Web界面,用来显示被监测网络的实时数据。即时的网络数据通过一个高级的绘图工具可以可视化。主机数据流和与之对应的主机通信信息可以被实时的进行可视化显示。
2.zabbix监控介绍
Zabbix是一个企业级的、开源的、分布式的监控套件
Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题作出相应. Zabbix可以利用存储数据提供杰出的报告及图形化方式. 这一特性将帮助用户完成容量规划.
Zabbix支持polling和trapping两种方式. 所有的Zabbix报告都可以通过配置参数在WEB前端进行访问. Web前端将帮助你在任何区域都能够迅速获得你的网络及服务状况. Zabbix可以通过尽可能的配置来扮演监控你的IT基础框架的角色,而不管你是来自于小型组织还是大规模的公司.
Zabbix是零成本的. 因为Zabbix编写和发布基于GPL V2协议. 意味着源代码是免费发布的.
C/S架构,基于C++开发,监控中心支持web界面配置和管理
单server节点可以支持上万台客户端
最新版本3.4,官方文档https://www.zabbix.com/manuals
5个组件
zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
数据存储 存放数据,比如mysql
web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报
3.安装zabbix
3.1 我们先到官网下载zabbix:
www.zabbix.com/download这个是官网地址
[[email protected] ]# wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
--2018-10-19 03:55:43-- http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
Resolving repo.zabbix.com (repo.zabbix.com)... 162.243.159.138
Connecting to repo.zabbix.com (repo.zabbix.com)|162.243.159.138|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13392 (13K) [application/x-redhat-package-manager]
Saving to: ‘zabbix-release-3.2-1.el7.noarch.rpm’
...............................................
[[email protected] ]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
warning: zabbix-release-3.2-1.el7.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-3.2-1.el7 ################################# [100%]
[[email protected] error.log]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
Loaded plugins: fastestmirror
...................................................
[[email protected] ]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 7.0 kB 00:00:00
* base: mirror.vpshosting.com.hk
* epel: mirrors.aliyun.com
* extras: mirror.vpshosting.com.hk
* updates: ftp.cuhk.edu.hk
..........................................................................
vim /etc/my.cnf //需要增加配置
[[email protected] ]# vim /etc/my.cnf
character_set_server = utf8
[[email protected] error.log]# systemctl restart mysqld
//进入mysql创建数据库用户
[[email protected] ]# mysql -uroot -p123456
MySQL [(none)]> create database zabbix character set utf8;
Query OK, 1 row affected (0.03 sec)
MySQL [(none)]> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';
Query OK, 0 rows affected (0.01 sec)
导入数据
[[email protected] ]#cd /usr/share/doc/zabbix-server-mysql-3.2.7
gzip -d create.sql.gz
mysql -uroot -pxxx zabbix < create.sql
3.2 启动httpd,编辑配置文件
[[email protected] zabbix-server-mysql-3.2.11]# systemctl start httpd
[[email protected] zabbix-server-mysql-3.2.11]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
//编辑配置文件增加下面两行
[[email protected] zabbix-server-mysql-3.2.11]# vim /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1 //在DBName=zabbix上面增加
DBPassword=aming-zabbix //在DBuser下面增加
//启动zabbix并增加开机启动
[[email protected] zabbix-server-mysql-3.2.11]# systemctl start zabbix-server
[[email protected] zabbix-server-mysql-3.2.11]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
//查看zabbix服务
[[email protected] zabbix-server-mysql-3.2.11]# ps aux |grep zabbix
zabbix 7397 0.6 0.4 254844 4144 ? S 04:19 0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix 7400 0.0 0.2 254844 2452 ? S 04:19 0:00 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
zabbix 7401 0.0 0.2 254844 2668 ? S 04:19 0:00 /usr/sbin/zabbix_server: db watchdog [synced alerts config in 0.013536 sec, idle 60 sec]
3.3浏览器访问zabbix配置页面
安装完成登录成功是这个界面
3.4 忘记Admin密码如何做
//进入mysql,执行update就可以更改密码
[[email protected] etc]# mysql -uroot -p123456 zabbix
MySQL [zabbix]> update users set passwd=md5(‘123456’) where alias=‘admin’;
3.5 zabbix 客户端的安装
[[email protected] ]# wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
[[email protected] ~]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
warning: zabbix-release-3.2-1.el7.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-3.2-1.el7 ################################# [100%]
[[email protected] ~]# yum install -y zabbix-agent
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink
* base: repo.virtualhosting.hk
* epel: mirrors.aliyun.com
* extras: repo.virtualhosting.hk
* updates: repo.virtualhosting.hk
base
epel
extras
updates
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=knightlai-123 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
[[email protected] ~]# systemctl start zabbix-agent
[[email protected] ~]# systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-ag
4.主动模式和被动模式
- 主动或者被动是相对客户端来讲的
- 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端
- 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。
- 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
- 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式
5.添加监控主机
- 先添加主机组knightlai
- 再添加主机,主机名称和可见名称都写knightlai01
- 群组选择knightlai
- IP地址填写客户端的ip 192.168.139.126
6.添加自定义模板
- 可以自定义一个常用模板,方便给新增主机添加监控项目
- 自定义knightlai模板
- 把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到aming模板里
- 定义触发器
- 添加图形
- 自动发现,找到Template OS Linux,点击右侧的自动发现,参考Mounted filesystem discovery和Network interface discovery定义规则
- 可以直接导出、导入模板,然后再删除不需要的对象
7.处理图形中的乱码
设置为中文后,zabbix图形的中文文字会显示小方框
这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来
windows字体路径为“C:\Windows\Fonts\”,找到SIMFANG.TTF,先把它复制到桌面上,然后上传到linux的
[[email protected] local]# mv SIMFANG.TTF /usr/share/zabbix/fonts/graphfont.ttf
8.添加自定义监控项目
需求:监控某台web的80端口连接数,并出图
两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现
8.1在客户端上编辑脚本
[[email protected] ~]# vim /usr/local/sbin/estab.sh
vim /usr/local/sbin/estab.sh //内容如下
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
[[email protected] ~]# chmod 777 /usr/local/sbin/estab.sh
[[email protected] ~]# 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
[[email protected] ~]# systemctl restart zabbix-agent
//在服务端验证脚本出现数字为正常
[[email protected] local]# zabbix_get -s 192.168.139.126 -p 10050 -k 'my.estab.count'
0
8.2 在web端配置增加监控项
在图形中增加监控项
如果网站访问量比较大这下面就会出现数据,因为我们是虚拟机所以没有什么数据
9.配置邮件告警
9.1 首先我们这里用163的邮箱设置报警邮件
9.2 在web端增加邮件报警
“管理”->“报警媒介类型”->“创建媒体类型”
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
9.3 在服务端创建邮件脚本并测试
[[email protected] alertscripts]# 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.163.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]','你的邮箱授权码','[email protected]',to,subject,content)
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
[[email protected] alertscripts]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
[[email protected] alertscripts]# python mail.py [email protected] "test is test" "234234234234"
脚本测试成功我们的163邮箱可以收到我们刚刚发的测试邮件。
9.4 在web端增加用户
创建一个接受告警邮件的用户,“管理”,“用户”,“创建用户”,“报警媒介”,
类型选择“youjian”,
注意用户的权限,如果没有需要到用户组去设置权限
9.5 配置报警触发条件并测试
设置动作,“配置”,“动作”,“创建动作”,名称写“sendmail”(自定义),“操作”页面,内容如下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
“新的触发条件”,A维护状态 非在 维护,B触发器示警度>=未分类
“操作”,选择发送的用户为刚创建的用户,仅送到选择“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”
9.6 测试报警邮件是否可以成功发出并接受
创建触发器,设置报警条件
我们在主界面去看一下是否有邮件发送出来
由于上面这个用户我们没有配置媒介类型所以会失败
我们到163邮箱看一下是否有邮件有一个我们刚刚设置的baojing邮件,说明配置成功了!