扩展
zabbix监控交换机(思科) http://tryrus.blog.51cto.com/10914693/1789847
zabbix远程执行命令 http://www.ywnds.com/?p=6610
zabbix分布式部署 http://sfzhang88.blog.51cto.com/4995876/1364399
zabbix监控tomcat(版本有点老,大家只需要参考步骤,不能照搬) http://www.fblinux.com/?p=616
1、监控存在的原因
站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大
2、常见开源监控软件
cacti、nagios、zabbix、smokeping、open-falcon等等,其中nagios、zabbix流行度非常高;
cacti、smokeping偏向于基础监控,成图非常漂亮,适合监控网络设备 cacti监控网络的设备;
cacti、nagios、zabbix服务端监控中心,需要php环境支持(用Apache的php,用nginx的php都可以),其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
3、目前业界都流行用zabbix。
zabbix配置简单,优势明显,早起使用nagios的企业,慢慢的转向使用zabbix;
nagios,需要更改配置文件,并不支持web界面一键执行,nagios和zabbix相比,nagios 更注重的是某一个监控的状态,不关注历史;
zabbix,则是把每一次监控的数值反馈出来,数值存到数据库里面,方便后期数据图去分析监控整个状态;
nagios不需要mysql的支持,不能成图,若需要画图,得安装插件以后才支持web界面;
ccti 也需要mysql的支持,也可以成图,可以记录历史数据
zabbix 在web界面下管理得非常彻底,可以增加监控节点,报警预知等等。
open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
open-falcon软件适合大企业使用,小企业可以去研究它的思想。
监控软件比较新的: prometheus grafana
1、zabbix简介
C/S架构,有一个服务端,去客户端抓数据。在客户端必须要有一个服务启动运行才可以抓取数据;数据可以主动的上报服务端,也可以让服务端去连接客户端获取(通过抓取数据方式,数据获取分两个模式,一个主动模式,一个被动模式),
zabbix软件基于C++开发,监控中心需要一个PHP的web环境,因为要开启一个web界面配置和管理 单台server节点(即一台server),理论上 可以支持上万台客户端
2、zabbix瓶颈:
在于采集数据的量,虽然支持上万台,但监控的项目过多,还是会导致zabbix效率降低;所以,当服务器大到一定规模的时候,就需要对zabbix进行优化;
解决方法:可以增加一些代理点,这些代理点充当server,替代server去采集数据,最终得到分析结果再汇报给主服务端server;
3、zabbix架构里,包括了5个组件:
zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
数据存储 存放数据,比如mysql
web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因(如果没有web界面,就无法在浏览器上配置它)
zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力(当机器量很多的时候,可以使用zabbix-proxy)
有时候,服务器分布在多个机房里,每个机房的服务器之间都是一个单独的内网,这时候就可以在某一个局域网里搭建一个 zabbix-proxy ,用这台 proxy 去监控局域网里的机器
zabbix-agent 客户端软件(每一台客户端都需要安装agent),负责采集各个监控服务或项目的数据,并上报。
安装zabbix的yum源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
需要安装zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
创建zabbix数据库
create database zabbix;
创建用户
grant all on zabbix.* to ‘zabbix’@‘127.0.0.1’ identified by ‘zabbix’;
编辑zabbix_server配置文件
vim /etc/zabbix/zabbix_server.conf
修改对应的数据库地址、数据库名称、数据库用户名、数据库密码
启动zabbix
systemctl start zabbix-server
服务没起来,查看zabbix日志
cat /var/log/zabbix/zabbix_server.log
出报错的原因的是对应的数据里并没有导入数据库文件
解压/usr/share/doc/zabbix-server-mysql-4.0.9下的create.sql.gz文件
gzip -d /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz
将解压出来的文件导入到zabbix库中
mysql -uroot -p123456 zabbix < /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql
启动zabbix
systemctl start zabbix-server
修改zabbix_agent配置文件
vim /etc/zabbix/zabbix_agentd.conf
启动zabbix-agent服务
systemctl start zabbix-agent
启动httpd服务。如果启动了nginx,需要先把nginx关闭,nginx不能关闭是,修改httpd监听的端口。
systemctl start httpd
访问zabbix
点next进行配置,提示php没有定义时区
修改php配置文件,定义时区
vim /etc/php.ini
修改配置文件后重启httpd服务
systemctl restart httpd
定义zabbix对应的数据库
定义server
name自定义
配置完之后进入zabbix登陆界面
用户名:admin
密码:zabbix
在另一台机器上安装zabbix的yum源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
安装yum install -y zabbix-agent
修改zabbix-agent配置至文件
vim /etc/zabbix/zabbix_agentd.conf
server和severactive修改为服务端的IP地址
启动zabbix-agent
systemctl start zabbix-agent
在web添加主机组
添加主机
主机可以在多个组
再选中模版进行编辑
选中不要的功能进行删除
把模版link给host
当这里显示为绿色,则配置成功
在服务端使用命令测试
zabbix_get -h 查看命令用法
zabbix_get -s 192.168.196.103 -p 10050 -k “system.cpu.load[all,avg1]”
先将zabbix数据库导出
mysqldump -uroot -p123456 --default-character-set=utf8 zabbix >zabbix.sql
编辑导出的文件,将所有的latin1替换成utf8
vim zabbix.sql
:1,$s/latin1/utf8/g
恢复数据库
mysql -uroot -p123456 --default-character-set=utf8 zabbix < zabbix.sql
使用163或者QQ邮箱发告警邮件 首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务 开启并记录授权码
在监控中心设置邮件告警
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
进入目录创建邮件监控脚本
cd /usr/lib/zabbix/alertscripts
vim 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()
给予755权限,否则不会执行此脚本;
chmod 755 mail.py
测试
python mail.py [email protected] “123” “123”
进入web页面,进行设置
点击权限,选中读写,点击选择read-write
此时用户权限也变更了
配置动作
在客户机上安装nginx
编辑yum仓库:
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
安装Nginx
yum install -y nginx
启动服务
systemctl start nginx
测试nginx是否正常启动
curl localhost
配置Nginx状态信息
vi /etc/nginx/conf.d/default.conf #增加
location /nginx_status
{
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
nginx -t \检查配置
nginx -s reload \重新加载配置
测试
curl http://127.0.0.1/nginx_status
字段 含义
Active Connections 当前活动连接数,其中也包括了等待状态的连接
accepts 接收到的连接数
handled 已经处理完的连接数,该数字一般和accepts一致,如果不一致那么说明Nginx出错了
requests 总共处理的请求数,一个连接可以有多个请求,所以该值比accpets要大
Reading 正在读取请求头信息的连接数
Writing 正在发送响应报文的连接数
Waiting 处于闲置状态,等待客户端发送请求的连接数
编写监控脚本(客户端)
vi /usr/local/sbin/ngx_status.sh
#内容如下
#!/bin/bash
url="http://127.0.0.1/nginx_status"
curl=/usr/bin/curl
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
$curl $url 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
$curl $url 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
$curl $url 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
$curl $url 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
$curl $url 2>/dev/null| awk NR==3 | awk '{print $3}'
}
$1
修改脚本权限
chmod 755 /usr/local/sbin/ngx_status.sh
编辑zabbix_agent.conf(客户端)
vi /etc/zabbix/zabbix_agentd.conf
定义监控脚本
#增加
UserParameter=nginx.status[*],/usr/local/sbin/ngx_status.sh $1
重启服务
systemctl restart zabbix-agent
zabbix_get 测试(服务端)
zabbix_get -s 192.168.190.105 -k 'nginx.status[accepts]
导入nginx模板
下载模板 https://github.com/aminglinux/linux2019/blob/master/zabbix_nginx_template/zbx_export_templates.xml
安装git进行克隆
Configuration -> Templates -> 右上角Import
链接模板
Configuration -> Hosts -> aminglinux02 -> Templates -> Select -> Add -> Update
监控流程:
1)安装zabbix_java_gateway
2)配置zabbix_java_gateway配置文件和zabbix_server配置文件,指定监听端口,启动进程数
3)编辑Tomcat配置文件,开启JMX
4)添加host,指定JMX interface
5)链接TOMCAT模板
安装zabbix_java_gateway(服务端)
yum install -y zabbix-java-gateway
修改配置文件
vi /etc/zabbix/zabbix_java_gateway.conf
定义 LISTEN_PORT 和 START_POLLERS
vi /etc/zabbix/zabbix_server.conf
定义 JavaGateway 和 JavaGatewayPort 和 StartJavaPollers
启动zabbix-java-gateway服务,重启zabbix-server服务
systemctl start zabbix-java-gateway
systemctl restart zabbix-server
开启JMX
vi /usr/local/tomcat/bin/catalina.sh #在#!/bin/sh下增加
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.190.102
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
添加Host链接模板
Configuration -> Hosts -> Create host
Agent interfaces -> remove
JMX interfaces -> Add -> 192.168.222.128 9999
Templates -> Select -> Template App Apache Tomcat JMX -> select -> Add
Add
授权一个监控用户
grant usage, process, replication client on . to ‘mon’@‘localhost’ identified by ‘x2ay9xodTvyM’;
编辑配置文件
vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mkdir /var/lib/zabbix
vi /var/lib/zabbix/.my.cnf #如下内容
[mysql]
host=localhost
user=mon
password='x2ay9xodTvyM'
socket=/tmp/mysql.sock
[mysqladmin]
host=localhost
user=mon
password='x2ay9xodTvyM'
socket=/tmp/mysql.sock
重启zabbix-agent服务
systemctl restart zabbix-agent
测试
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.ping
若提示:sh: mysqladmin: 未找到命令
需要: ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.version
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.size
添加主机和模板
Configuration -> Hosts -> Create host
Agent interfaces -> 127.0.0.1 10050
Templates -> Select -> Template DB MySQL -> select -> Add
Add