第十九章、Linux监控平台搭建

19.1 Linux监控平台介绍
19.2 zabbix监控介绍
19.3/19.4/19.6 安装zabbix(上)
19.5 忘记Admin密码如何做
19.7 主动模式和被动模式
19.8 添加监控主机
19.9 添加自定义模板
19.10 处理图形中的乱码
19.11 自动发现
19.12 添加自定义监控项目
19.13/19.14 配置邮件告警
19.15 测试告警
19.16 不发邮件的问题处理
 
 
19.1 Linux监控平台介绍
常见开源监控软件
cacti、nagios、zabbix、smokeping、open-falcon等等
 
#cacti、smokeping偏向于基础监控(监控网络设备),成图非常漂亮
 
#cacti、nagios、zabbix支持web界面去管理控制
# cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储, nagios不用存储历史数据,注重服务或者监控项的状态zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
 
#open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
 
 
19.2 zabbix监控介绍
#C/S架构,基于C++开发,监控中心支持web界面配置和管理
#单server节点理论上可以支持上万台客户端
 
#最新版本3.4,官方文档https://www.zabbix.com/manuals
 
zabbix监控包括5个组件
  1. zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
  2. 数据存储 存放数据,比如mysql
  3. web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
  4. zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
  5. zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报
zabbix监控流程图
1、首先添加主机到监控中心
2、配置监控项目,配置成功后能和服务端通信,就会采集数据上报到数据中心(也就是mysql,Zabbix.server)(采集过程可以使主动或被动)
3、Zabbix.server上配置一个告警规则和告警机制,判断采集的数据值是否达到告警的条件;如果达到了就进行告警机制,没达到就是进行存储;
4、所有的配置过程全部都在web界面(UI)里配置;存储的数据都可在前端显示出来,通过web界面展现出来
 
 
19.3/19.4/19.6 安装zabbix
实验准备两台机器,一台作为服务端(监控中心),一台作为服务端
 
#Zabbix可以直接通过yum安装,但是需要安装epel扩展源,但是里边的最高版本是2.2
 
一、服务端安装zabbix
1、下载zabbix的yum源
官网下载地址 www.zabbix.com/download
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
 
2、安装Zabbix包
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm    #安装Zabbix包
#安装完进入/etc/yum.repos.d/可以发现多了个zabbix.repo的仓库,这样接下来即可使用yum安装zabbix
 
3、yum下载zabbix-server相关组件 (客户端的haul只需要下载 zabbix-agent即可)
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
#yum下载zabbix相关组件,会连带安装httpd和php
 
4、需要安装mysql
 
5、启动mysql
systemctl start mysql
 
6、编辑mysql配置文件,设定字符集(为了防止web界面设置为中文会出现问题)
vim /etc/my.cnf 
#需要增加配置
character_set_server = utf8
 
7、重启mysqld服务
systemctl restart mysql
 
8、进入mysql数据库,创建zabbix的库和用户
mysql -uroot -p123456
create database zabbix character set utf8;   #创建zabbix库并设置字符集
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456';    #创建zabbix用户
#如果mysql是放在其它服务器上面,在授权时要把127.0.0.1改为其它服务器的ip
 
9、导入zabbix-server原始数据
cd /usr/share/doc/zabbix-server-mysql-3.2.7
gzip -d create.sql.gz
mysql -uroot -pxxx zabbix < create.sql
 
10、开启httpd服务并设置开机自启(要查看80端口是否被占用,httpd监听80端口)
systemctl start httpd; systemctl enable httpd
 
注意:
配置zabbix-server遇到错误查看zabbix日志
less  /var/log/zabbix/zabbix_server.log
 
11、编辑zabbix-server配置文件( 目的是为了与mysql连接)
vim /etc/zabbix/zabbix_server.conf 
#增加两句
在DBName=zabbix上面增加 "DBHost=127.0.0.1"或者"DBHost=localhost"
#mysql所在服务器的ip
#实验时mysql在本机上,实际生产环境中为了提高监控中心的效率,可以把mysql放在其它服务器上面
 
在DBuser下面增加 "DBPassword=xin-zabbix"
#这个是授权zabbix用户的密码
 
12、开启zabbix-server服务并设置开机自启
systemctl start zabbix-server
systemctl enable zabbix-server
 
13、查看监听端口看zabbix-server是否成功启动
(zabbix-server监听10051端口
netstat -lntp |grep zabbix 
 
14、web界面下面配置zabbix前端
浏览器访问http://ip/zabbix/  
#ip为监控中心的ip地址,实验是192.168.233.150
 
点击next  step,只需要看右侧,ok就不用管,fail要找出错误并修改
这里是php的时区没有设置,所以要去php的配置文件设置
vim /etc/php.ini
找到"date.timezone = "增加  "Asia/Shanghai"
 
然后重启httpd服务
systemctl restart httpd
 
再刷新浏览器页面,所有项都是ok时,点击next step,填写zabbix相关信息
database  host 127.0.0.1
database  port  0       # 写0会默认是3306
database  name  zabbix
user         zabbix
password  xin-zabbix
 
继续next step ,填写zabbix主机名 xinlinux-03
继续next step,安装完毕
 
 
然后进行管理员登录
用户名Admin 密码zabbix
#进入后台第一件事情就是修改密码,一开始都是默认密码
 
修改密码流程
点击Adminstration --> Users --> 找到Admin用户,点击 --> 修改密码
顺便再改zabbix web界面语言,选择Language,改为中文
 
 
二、Zabbix客户端安装
1、下载zabbix的yum源
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
 
2、安装zabbix的rpm包
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
 
3、下载zabbix-agent
yum install -y zabbix-agent
 
4、编辑zabbix配置文件(指定服务端ip)
vim  /etc/zabbix/zabbix_agentd.conf 
#修改如下配置
Server=127.0.0.1修改为 Server=192.168.233.150  
#定义服务端的ip(被动模式)
 
ServerActive=127.0.0.1修改为 ServerActive=192.168.233.150 
#定义服务端的ip(主动模式)
 
Hostname=Zabbix server修改为 Hostname=xinlinux-01
#这是自定义的主机名,一会还需要在web界面下设置同样的主机名
 
5、启动zabbix-agent服务并设置开机自启
systemctl start zabbix-agent
systemctl enable zabbix-agent
 
6、查看监听端口看zabbix-agent是否成功启动
(zabbix-agent监听10050端口)
netstat -lntp |grep zabbix 
 
 
19.5 忘记Admin密码如何做
进入mysql命令行,选择zabbix库
mysql -uroot -p zabbix
use zabbix;
update users set passwd=md5('languoxin') where alias='Admin';
#这样就更改了Admin用户的密码
 
 
19.7 主动模式和被动模式
主动或者被动是相对客户端来讲的
  • 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端
  • 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。
 
#当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
 
#服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式
 
 
19.8 添加监控主机
zabbix的web界面进行操作
1、先添加主机组test
2、再添加主机,主机名称和可见名称都写xinlinux-01
3、群组选择test
4、IP地址填写客户端的ip 192.168.233.129,DNS不用写
 
几个概念:应用集、监控项、触发器、图形、自动发现、web监测
  • 应用集:监控项的一个集合,方便管理监控项
  • 监控项:所有监控的项目
  • 触发器:针对某个监控项目设置的一个告警规则
  • 图形:历史数据组成的图表
  • 自动发现:1、文件系统的磁盘分区使用比例;2、网卡使用流量比例
  • web场景:监控某个网站
 
 
19.9 添加自定义模板
#可以自定义一个常用模板,方便给新增主机添加监控项目
自定义xin模板例子
过程
点击模板-->创建模板-->选择群组拉过来-->点击添加
把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到xin模板里
 
应用集、监控项、触发器、添加图形、web场景都可以直接复制;但是自动发现没有复制按钮,需要通过其它方法放到模板里
复制自动发现的方法:
  • 方法一、 找到Template OS Linux,点击导出,会下载一个xml文件,使用Edit编辑器打开,修改名字,删除一些不相关的东西,工作量很大,很麻烦
  • 方法二、 将之前选择的监控项全部删除(xin模板限制是空白的状态)-->点击链接的模板-->选择Template OS Linux-->点击添加会保存选择的内容-->点击更新(Template OS Linux的内容全部复制到xin模板)
 
删除链接模板内容的操作
  • 这时候直接在xin 模板删除不需要的内容是删除不了的,因为xin模板链接了Template OS Linux
  • 这时可以在点击链接模板,会发现有两个选项:取消链接、取消链接并清理,点击取消链接,接下来即可删除不需要的内容(注意要先删除监控项才能删除应用集)
 
 
19.10 处理图形中的乱码
#设置为中文后,zabbix图形的中文文字会显示小方框
这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来
vim /usr/share/zabbix/include/defines.inc.php 
#搜索ZBX_FONTPATH
它定义的路径是“fonts”,它是一个相对路径,绝对路径为 /usr/share/zabbix/fonts,而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为 /usr/share/zabbix/fonts/graphfont
windows字体路径为“ C:\Windows\Fonts\
 
步骤:
1、找到windows字体路径为“C:\Windows\Fonts\”的
“simfang.ttf”(仿宋简体)(只要是中文字体即可),
 
2、把它复制到桌面上
 
3、上传到linux的/usr/share/zabbix/fonts/,
#CTRL+ALT+F,使用xftp上传
 
4、将原来的graphfont.ttf改名为graphfont.ttf.bak,
mv graphfont.ttf graphfont.ttf.bak
 
5、做一个以simfang.ttf为目的的graphfont.ttf软链接文件
ln  -s simfang.ttf   graphfont.ttf
 
 
19.11 自动发现
修改自动发现规则的数据发送间隔
例如:
点击一个自动发现规则Network interface discovery,找到数据更新间隔,修改数值即可
 
为了实现效果更明显
重启zabbix-server服务端和zabbix-agent客户端
systemctl restart zabbix-server
systemctl restart zabbix-agent
 
然后在客户端使用xftp上传文件,增大网卡流量,
 
 
19.12 添加自定义监控项目
需求:监控某台web的80端口连接数,并出图
三步:1)在客户端通过脚本获取80端口连接数数据;2)zabbix监控中心创建监控项目;3)针对该监控项目以图形展现
 
一、在客户端通过脚本获取80端口连接数数据
1、到客户端定义脚本
vim /usr/local/sbin/estab.sh 
#内容如下
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
 
2、增加脚本权限
chmod 755 /usr/local/sbin/estab.sh
 
3、客户端上编辑配置文件 
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
 
4、重启zabbix-agent服务
systemctl restart zabbix-agent
 
5、到服务端验证,执行 zabbix_get命令
zabbix_get -s 192.168.133.132 -p 10050 -k 'my.estab.count'
#检测自定义脚本是否有误或者不能运行,数值显示0为正常
 
#一定要保持网络的通畅,没有防火墙规则及SEXlinux
 
二、zabbix监控中心创建监控项目
6、在zabbix监控中心(浏览器)配置增加监控项目
名称写并发连接数,键值(key)写 my.estab.count
 
7、查看数据是否出现
监测中心-->最新数据-->查看刚添加的项目是否有数据出现
 
三、针对该监控项目以图形展现
8、有数据后就可以添加图形了
点击 配置-->主机-->图形-->创建图形
 
 
19.13/19.14 配置邮件告警
#使用163邮箱发告警邮件
 
1、首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务
设置-->选择POP3/IMAP/SMTP-->将POP3/SMTP、IMAP/SMTP打钩,然后输入短信验证码
 
2、开启并记录授权码(发邮件使用的密码(要尽可能的复杂))
客户端授权密码-->开启客户端授权码
 
3、然后到监控中心设置邮件告警
管理 -->报警媒介类型 -->创建媒体类型 -->名字自定义(实验是baojing),类型选脚本 -->添加三个脚本参数 (顺序不能更改)
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
 
4、创建报警脚 本mail.py
vim /usr/lib/zabbix/alertscripts/mail.py
修改地方两处:
定义发邮件服务器域名:
gserver =  smtp 163.com
定义邮箱用户名,密码,授权码,邮箱域名
sendqqmail([email protected],languoxin,languoxin123,to,subject,content)
 
5、添加脚本权限
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
 
测试是否可以发送邮件
python mail.py [email protected]  "hopjag"  "123465"
打开 [email protected],查看是否收到邮件
 
 
6、创建一个接受告警邮件的用户
管理-->用户-->创建用户(选择管理员组)-->报警媒介-->类型选择“baojing”,收件人写邮件地址([email protected]),指定事件类型级别会发出告警(选择所有的)-->点击权限-->查看用户权限
#如果用户没有读写权限,最终告警邮件也会收不到
#注意用户的权限,如果没有,需要到用户组去设置权限
管理-->用户群组-->选择更改创建的用户所在的组-->权限-->选择读写,勾上所有用户-->点击添加-->更新
 
7、设置动作(触发器触发后要做的事情)
配置-->动作-->创建动作-->名称写“发邮件”(自定义)-->条件默认自带一个A“维护状态 非在 维护”-->再添加一个条件B"触发器示警度",选择">=" "未分类"-->计算方式选项选择A和B(即要同时满足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”-->点击左下角的添加(保存修改)
 
 
19.15 测试告警
创建一个自定义的触发器
配置 -->主机 -->触发器 -->创建新触发器
名称:系统负载
严重性: 警告
表达式:点击添加 -->选择processor load(系统负载)监控项 -->功能选择“最新的T值<N” -->N数值写1-->然后点击添加保存
 
为了试验更加方便,将更新数据间隔设置为10秒
配置-->主机-->监控项-->点击系统负载-->设置更新数据间隔
 
点击监测中 -->仪表盘 -->看最近20个问题(等一会就会显示)
 
 
查看监测中的问题
如果发送邮件成功但是邮箱没有收到
1、可以先检测脚本是否有问题
2、查看管理-->用户-->报警媒介的邮箱是否有问题,还有权限是否指定的用户有读写权限
3、检测发邮件的动作
检查以下的每个步骤
配置-->动作-->动作-->条件
配置-->动作-->操作-->新的-->编辑-->默认信息(有时候格式会出现问题,试一下还原成原来的信息)、发送到用户、仅发送、条件-->点击更新
 
#下面的默认信息的√取消会出现自带的默认信息,将上面的默认信息还原成原来的默认信息实验一下
 
再测试一次,点击监测中 -->仪表盘 -->看最近20个问题(等一会就会显示)
 
 
19.16 不发邮件的问题处理
主动模式与被动模式的选择
在配置-->主机-->监控项-->点击一个项目-->类型(默认是客户端(被动模式),可以选择客户端主动式(主动模式))
 
事件是成对出现的(内容的ID是一样的),在邮件中,一般一个OK,一个
PROBLEM
 
19.17课堂笔记
一、LVS DR模式搭建
实际上LVS只作为负载均衡,实现高可用用keepalived即可
 
 
二、keeplived+LVS
#keepalived 的主要目的是做高可用;#keepalived内置了ipvsadm的功能,所有不用再安装ipvsadm包,不用编写和执行那个lvs_dir的脚本
 
 
三、拓展
1、keepalived与heartbeat比较
1)keepalived使用更简单;
2)heartbeat功能更强大,适合做大型集群管理;keepalived主要用于集群倒换,基本没有管理功能;
3)协议不同;keepalived用VRRP协议进行通信和选举,heartbeat用心跳进行通信和选举,还可通过串口通信;
4)使用方式基本类似;两者设计高可用方案,最终都要根据业务需要写自定义的脚本
 
总结:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
 
 
2、DRBD安装配置、工作原理及故障恢复
#适用于两台机器共享数据而不用昂贵的数据共享设备
DRBD:类似磁盘做了raid1,通过网络实现;两台服务器安装DRBD服务,A服务器写数据,B服务器也会跟着写数据(偏硬件)
 
目的:实现mysql的高可用,其中一台服务器坏了可以用另一台服务器读写
 
DRBD复制模式
  • 协议A:异步复制协议    一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点
  • 协议B:内存同步(版同步复制协议)  一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘
  • 协议C:同步复制协议    只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但I / O吞吐量依赖于网络带宽
 
一般选用协议c,保证数据的一致性,效率会低一点,且影响流量,从而影响网络时延;协议A,B可能会造成数据丢失,但是效率高。
 
安装配置、故障恢复具体查看网页: http://blog.51cto.com/502245466/1298945
 
 
3、mysql+keepalived
 
4、haproxy+keepalived
 
5、nginx、LVS、HAProxy优缺点
nginx、LVS、HAProxy都可以进行负载均衡
 
如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。
 
nginx与LVS比较,具体看网页:
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/Lucky-LGX/p/9822191.html