监控的意义:防范事故于未然、没有故障的时候,收集数据。
有故障就报警监控的选择上:
1.使用开源的–》成本低、技术实力相对低
2.自研–》自己研发–)投入大、技术水平要求高—》小米
zabbix–》cacti和nagios的结合体,图形和脚本都比较好–》大获全胜、抢占市场
https://www.zabbix.com/cn/
普罗米修斯
介绍zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5e10902.html
Zabbix 是一个企业级的分布式开源监控方案。 zabbix就是一个监控软件。
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。
Zabbix是免费的。
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。
zabbix由2部分构成,zabbix server与可选组件zabbix agent。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在路由器和交换机、Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
采集数据:zabbix agent
存储数据:mysq1,mariadb
展示数据:web方式–》httpd、nginx
动态语言:PHP
CLI:command line interface 命合行界面
GUI:graphic user interface 用户图形界面–》点鼠标
介绍zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5010902.html
zabbix是一个开源分布式监控软件(cpu 内存 磁盘 网络 服务),由4个部分组成
1.zabbix-server
2.zabbix-client
3.database
4.zabbix-web gui
5.proxy 分布式监控
zabbix agentd:代理程序–》间课程序–》采集:os、设备、应用程序、数据库信息
zabbix_agentd.conf–》配置文件
zabbix_agentd.log–>日志文件
数据库:mysql、mariadb
展现:web方式–》php语言开发的web界面到数据库里拿数据展示给用户–》用户使用浏览器去看
LNMP:Linux nginx MySQL php/python/per1–>集成开发环境
LAMP:Linux apache MySQL php/python/perl
WAMP:windows apache MySQL php
WNMP:windows nginx MysQL php
php和网站相关的技术结合更紧密–)html和js、css
准备至少两台cent os7主机,尽量让自己系统属于纯净环境,安装zabbix_server (Zabbix) 4.4.6
server ip :192.168.0.66
agent ip: 192.168.0.212
一台作为server端 一台作为agent端
1.关闭防火墙 sellinux
关闭防火墙
service firewalld stop
systemctl disable firewalld
关闭selinux
vi /etc/selinux/config
将SELINUX=disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
退出并保存
或者setenforce 0 临时禁用修改selinux
2.导入软件 ,解压缩
centos7-software-zabbix.zip
如果没有unzip命令 执行yum install unzip
unzip centos7-software-zabbix.zip
3.安装server端
cd centos7-software-zabbix
首先安装epel-release
yum install epel-release
安装所有zabbix包
yum install zabbix-*
4.agent端安装
将zabbix-agent-4.4.6-1.el7.x86_64.rpm传输到agent端
scp zabbix-agent-4.4.6-1.el7.x86_64.rpm [email protected]:~
在agent端执行
yum install zabbix-agent-4.4.6-1.el7.x86_64.rpm
5.安装并启动mariadb和nginx
yum install mariadb mariadb-server -y
service mariadb start 启动mariadb
systemctl enable mariadb 设置开机自启
yum install nginx -y
service nginx start 启动mariadb
systemctl enable nginx 设置开机自启
6.进入mariadb 环境配置
mysql -uroot -p 默认mariadb安装好,是没有密码的
create database zabbix character set utf8 collate utf8_bin; 建库zabbix,指定字符集为utf8
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| zabbix |
+--------------------+
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123';
新建一个用户zabbix@localhost 密码为zabbix123 可以有所有的权限在zabbix这个库里的所有的表上
导入数据到MySQL数据库里的zabbix库
cd /usr/share/doc/zabbix-server-mysql-4.4.6/
[root@zabbix zabbix-server-mysql-4.4.6]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
gunzip create.sql.gz
mysql -uzabbix -p'zabbix123' zabbix < create.sql
或者使用下面的命令完成数据的导入
zcat /usr/share/doc/zabbix-server-mysql-4.0.10/create.sql.gz |mysql -uzabbix -pzabbix123 zabbix
7.修改Zabbix的配置
在zabbix_server.conf中编辑数据库配置
vi /etc/zabbix/zabbix_server.conf
默认修改这四个
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix123
如果你的数据库是编译安装的mysql 那么就设置以下两个
DBSocket=/data/mysql/mysql.sock mysql编译安装默认会把本地socket从tmp目录放到/data/mysql/下 因此需要手动指定本地socket位置 才能进行连接
DBPort=3306 指定连接端口
8.启动Zabbix Server 进程
启动Zabbix Server进程
service zabbix-server start
ps aux|grep zabbix 说明zabbix已经启动
zabbix 48631 0.0 0.1 257624 3384 ? S 15:26 0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root 48634 0.0 0.0 112724 988 pts/0 S+ 15:26 0:00 grep --color=auto zabbix
并在系统启动时让它自启:
systemctl enable zabbix-server
9.修改php-fpm文件
php_value[date.timezone] 修改为Asia/Shanghai
php-fpm 提供php页面解析的程序--》php解释器,nginx只提供静态页面解析
vim /etc/php-fpm.d/zabbix.conf
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
php_value[date.timezone] = Asia/Shanghai
10.启动相关环境
# systemctl restart zabbix-server zabbix-agent httpd php-fpm mariadb
# systemctl enable zabbix-server zabbix-agent httpd php-fpm mariadb
使用nginx --》LNMP环境
# systemctl restart zabbix-server zabbix-agent nginx php-fpm mariadb
# systemctl enable zabbix-server zabbix-agent nginx php-fpm mariadb
11.修改agent端的配置文件
在agent端
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.66 #修改为允许来采集数据的服务器ip,不然下面的zabbix_get命令不能去采集数据
ServerActive=192.168.0.66
service zabbix-agent restart 刷新服务
12.测试连通情况
zabbix_get -s 192.168.0.212 -p 10050 -k "system.cpu.load[all,avg1]"
zabbix_get 是一个server端获取客户端数据的工具
-s 192.168.111.131 指定客户端的ip地址
-p 10050 zabbix-agentd程序默认开发的端口号
-k "system.cpu.load[all,avg1]" 指定获取的值--》key--》系统里的cpu的平均负载
如果所示说明连接成功
1.修改nginx配置
vim /etc/nginx/conf.d/
将listen 和server_name 改为如下情况
server {
listen 80; #监听的端口号
server_name www.setup.com; #虚拟主机(网站服务的域名)
root /usr/share/zabbix; #这里存放着zabbix的网页
index index.php; #网站的首页
location = /favicon.ico {
log_not_found off;
}
.....
重启nginx
service nginx restart
2.在windows本机的hosts文件中绑定域名
cd C:\Windows\System32\drivers\etc
在hosts文件里添加,注意这里要要有本机环境
192.168.0.66 www.setup.com ip是server端IP
3.浏览器输入www.setup直接访问,出现如下页面说明绑定成功
注意我这里碰到一个问题那就是,我输入域名竟然是下面的页面,经检查原来是我php-fpm,没有启动起来,这就导致只解析了静态页面,而/etc/nginx/conf.d/里重定向的zabbix的php文件无法获得解析,那么nginx只能显示静态页面,这是一个大坑,值得铭记
4.安装zabbix页面
这里遇到的问题总结
1.配置页面必须全绿才能,如果有失败的那么需要进行排错一般是都是zabbix的变量问题
2.连接数据库时要把localhost改为127.0.0.1
3.如果找不到socket文件,那就添加一个软连接连接到报错位置就好了
4.数据栏是添加前面新建的zabbix用户,密码zabbix123就可以了
默认的登录的用户名和密码是Admin和zabbix
选项web图形概念 | 解释 |
---|---|
应用集 | 一类有共同特点的监控项的集合 |
监控项 | 被监控的服务 |
触发器 | 当某个监控项到达某个设定的值可以触发报警 |
图形 | 将采集到的数值进行图形化显示 |
自动发现 | 每个一定时间自动采集 |
模板 | 有很多的应用集,里面有很多的监控项 |
1.nginx服务是否在运行
2.请求数量
1.在需要监控的agent端安装nginx服务
yum install epel-release -y
yum install nginx -y
2.启动nginx服务
[root@nginx-mysqldb nginx]# service nginx start
Redirecting to /bin/systemctl start nginx.service
3.在zabbix-agent端的linux服务器上的nginx的主配置文件里添加下面的配置项,开启nginx的统计功能
vim /etc/nginx/nginx.conf
#开启nginx本身的统计功能
location /nginx_status {
stub_status on;
}
4.刷新nginx服务
service nginx restart
5.web方式访问,查看效果
http://本机ip/nginx_status
输出效果如下所示:
Active connections: 2
server accepts handled requests
18 18 23
Reading: 0 Writing: 1 Waiting: 1
Active connections Nginx正处理的活动链接数个数;重要
accepts Nginx启动到现在共接受了多少个连接。
handled Nginx启动到现在共处理了多少个连接。
requests Nginx总共处理了请求次数。
Reading Nginx读取到客户端的 Header 信息数。
Writing Nginx返回给客户端的 Header 信息数。
Waiting Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。
Keep-alive的情况下,Waiting这个值等于active-(reading + writing)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
提供以下状态信息:
Active connections
当前活动的客户端连接数,包括Waiting连接数。
accepts
接受的客户端连接总数。
handled
已处理的连接总数。通常,参数值与accepts 除非达到某些资源限制(例如, worker_connections限制)相同。
requests
客户端请求总数。
Reading
nginx正在读取请求标头的当前连接数。
Writing
nginx正在将响应写回到客户端的当前连接数。
Waiting
当前等待请求的空闲客户端连接数
6.zabbix-agent的nginx参数配置文件
进入/etc/zabbix/zabbix_agentd.d文件夹
创建userparameter_nginx.conf
写入
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1
创建nginx.sh
#ip为本机ip
HOST="192.168.1.141"
PORT="80"
function ping {
/sbin/pidof nginx | wc -l
}
function active {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $1 in
active)
active
;;
reading)
reading
;;
writing)
writing
;;
waiting)
waiting
;;
accepts)
accepts
;;
ping)
ping
;;
handled)
handled
;;
requests)
requests
;;
esac
改良版本的nginx_vs.sh的采集数据的脚本
HOST="192.168.1.141"
PORT="80"
case $1 in
active)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
;;
reading)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
;;
writing)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
;;
waiting)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
;;
accepts)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
;;
ping)
/sbin/pidof nginx | wc -w
;;
handled)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
;;
requests)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
;;
esac
8.授予nginx.sh可执行权限
chmod +x nginx.sh
9.刷新zabbix-agent服务
service zabbix-agent restart
10.在zabbix-server上测试是否可以采集数据
zabbix_get -s 192.168.111.133 -p 10050 -k nginx.status[active]
active是作为参数传入脚本,也可以传入其他的选项, 192.168.111.133是指定采集的nginx服务器ip
server端:192.168.0.75
agent端(mysql监控端):192.168.0.212
操作未说明在server端那那全部都是agent的操作
1.安装mysql或者mariadb
yum install mariadb mariadb-server -y
2.启动mariadb,并且设置开机启动
systemctl start mariadb
systemctl enable mariadb
3.查看是否启动
lsof -i:3306
ps aux|grep mysql
netstat -anplut|grep mysql
4.检查系统安全策略是否关闭
检查下selinu和防火墙是否关闭
getenforce
iptables -L
5.进入/etc/zabbix/zabbix_agentd.d文件夹
创建userparameter_mysql.conf 添加(注意这里第2行和第三行要并成一行)
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1
UserParameter=mysql.ping,/usr/bin/mysqladmin -ucali -p'cali123456' -h localhost ping 2>/dev/null | grep -c alive
UserParameter=mysql.version,/usr/bin/mysql -V
UserParameter=mysql.bytes_sent,/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1
一行一个对应的参数,可以添加很多行,也就是很多参数,方便zabbix-server和zabbix-agent之间沟通
UserParameter=mysql.bytes_sent 是zabbix-server后面采集数据传递的参数 mysql.bytes_sent
/etc/zabbix/zabbix_agentd.d/mysql_status.sh $1 是接受到mysql.bytes_sent后,zabbix-agent需要执行的命令
创建mysql_status.sh
#!/bin/bash
#Desc:zabbix 监控 MySQL 状态
#Date:2020-3-19
#by:cali
#主机
HOST="localhost"
#用户
USER="用户名"
#密码
PASSWORD="密码"
#端口
PORT="3306"
#MySQL连接
CONNECTION="mysqladmin -h ${HOST} -u ${USER} -P ${PORT} -p${PASSWORD}"
if [ $# -ne "1" ];then
echo "arg error!"
fi
case $1 in
Uptime)
result=`${CONNECTION} status 2>/dev/null |awk '{print $2}'`
echo $result
;;
Questions)
result=`${CONNECTION} status 2>/dev/null |awk '{print $6}'`
echo $result
;;
Com_update)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_update" |awk '{print $4}'`
echo $result
;;
Slow_queries)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Slow_queries" |awk '{print $4}'`
echo $result
;;
Com_select)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_select" |awk '{print $4}'`
echo $result
;;
Com_rollback)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_rollback" |awk '{print $4}'`
echo $result
;;
Com_insert)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_insert" |awk '{print $4}'`
echo $result
;;
Com_delete)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_delete" |awk '{print $4}'`
echo $result
;;
Com_commit)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_commit" |awk '{print $4}'`
echo $result
;;
Bytes_sent)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_sent" |awk '{print $4}'`
echo $result
;;
Bytes_received)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_received" |awk '{print $4}'`
echo $result
;;
Com_begin)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_begin" |awk '{print $4}'`
echo $result
;;
Threads_connected)
result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Threads_connected" |awk '{print $4}'`
echo $result
;;
*)
echo "Usage:$0(Uptime|Questions|Com_update|Slow_queries|Com_select|Com_rollback|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin|Threads_connected)"
;;
esac
6.给脚本可执行权限
chmod +x mysql_status.sh
7.mysql授权访问
登录mysql
grant all privileges on *.* to 账号@'%' identified by ‘自己的密码’
8.查看是否能获得数据
mysqladmin -h localhost -u(you user) -p'password' -P 3306 version
mysqladmin Ver 9.1 Distrib 10.3.17-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Server version 10.3.17-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 27 min 50 sec
Threads: 8 Questions: 42 Slow queries: 0 Opens: 37 Flush tables: 1 Open tables: 31 Queries per second avg: 0.025
9.创建postion.sh
echo "位置变量的个数: $#"
echo "位置变量的内容: $*"
echo "第1个位置变量: $1"
echo "第2个位置变量: $2"
echo "第3个位置变量: $3"
chmod +x postion.sh
10.重启agent服务
service zabbix-agent restart
11.服务端查看是否能收集到数据,说明采集成功
zabbix_get -s 192.168.0.212 -k mysql.status[Uptime]
2754
有数值返回则成功
创建db主机群组
对db_mysql创建主机
对db_mysql创建监控项
创建图形
这样就可以查看图形了,图中的虚线是定义的触发器当超过这个线会触发报警
这里对db_mysql主机定义一个若连接大于3则报警的触发器
当连接大于大于或等于4的时候,触发灾难报警,显示如下则设置成功
`