zabbix监控服务搭建mysql与nginx定制监控

文章目录

      • 1.监控的意义
      • 2.常见的开源的监控软件的名字:
      • 3.zabbix的介绍
      • 4.zabbix配置
      • 5.各种网站环境
      • 6.ZAbbix安装
        • 搭建web页面
      • 关于zabbix5的介绍
      • 7.zabbix web页面使用
      • 8.zabbix监控nginx
        • zabbix来监控nginx服务对象
        • 实现步骤
      • 9.Zabbix监控mysql
      • 10.创建创建可视化操作

1.监控的意义

监控的意义:防范事故于未然、没有故障的时候,收集数据。

有故障就报警监控的选择上:
1.使用开源的–》成本低、技术实力相对低

2.自研–》自己研发–)投入大、技术水平要求高—》小米

2.常见的开源的监控软件的名字:

zabbix–》cacti和nagios的结合体,图形和脚本都比较好–》大获全胜、抢占市场

https://www.zabbix.com/cn/

普罗米修斯
介绍zabbix工作的原理的:
https://www.cnblogs.com/mysql-dba/p/5e10902.html

3.zabbix的介绍

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 分布式监控

4.zabbix配置

zabbix agentd:代理程序–》间课程序–》采集:os、设备、应用程序、数据库信息
zabbix_agentd.conf–》配置文件
zabbix_agentd.log–>日志文件

数据库:mysql、mariadb
展现:web方式–》php语言开发的web界面到数据库里拿数据展示给用户–》用户使用浏览器去看

5.各种网站环境

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

6.ZAbbix安装

准备至少两台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

zabbix监控服务搭建mysql与nginx定制监控_第1张图片

首先安装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  设置开机自启
 

ps aux|grep mysql查看进程
在这里插入图片描述

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的平均负载

如果所示说明连接成功

在这里插入图片描述

搭建web页面

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直接访问,出现如下页面说明绑定成功
zabbix监控服务搭建mysql与nginx定制监控_第2张图片

注意我这里碰到一个问题那就是,我输入域名竟然是下面的页面,经检查原来是我php-fpm,没有启动起来,这就导致只解析了静态页面,而/etc/nginx/conf.d/里重定向的zabbix的php文件无法获得解析,那么nginx只能显示静态页面,这是一个大坑,值得铭记

zabbix监控服务搭建mysql与nginx定制监控_第3张图片

4.安装zabbix页面
这里遇到的问题总结
1.配置页面必须全绿才能,如果有失败的那么需要进行排错一般是都是zabbix的变量问题

2.连接数据库时要把localhost改为127.0.0.1
3.如果找不到socket文件,那就添加一个软连接连接到报错位置就好了
4.数据栏是添加前面新建的zabbix用户,密码zabbix123就可以了

zabbix监控服务搭建mysql与nginx定制监控_第4张图片

默认的登录的用户名和密码是Admin和zabbix

登录成功,显示如下页面发现安装成功
zabbix监控服务搭建mysql与nginx定制监控_第5张图片

关于zabbix5的介绍

  • https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
  • https://www.it610.com/article/1283296687791554560.htm
  • http://blog.cactifans.com/2020/05/17/Zabbix-5.0-LTS-%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85/
  • https://www.zabbix.com/documentation/current/manual/installation/requirements

7.zabbix web页面使用

选项web图形概念 解释
应用集 一类有共同特点的监控项的集合
监控项 被监控的服务
触发器 当某个监控项到达某个设定的值可以触发报警
图形 将采集到的数值进行图形化显示
自动发现 每个一定时间自动采集
模板 有很多的应用集,里面有很多的监控项

8.zabbix监控nginx

zabbix来监控nginx服务对象

​ 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

9.Zabbix监控mysql

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
有数值返回则成功

10.创建创建可视化操作

创建db主机群组

zabbix监控服务搭建mysql与nginx定制监控_第6张图片

对db_mysql创建主机


zabbix监控服务搭建mysql与nginx定制监控_第7张图片

zabbix监控服务搭建mysql与nginx定制监控_第8张图片

对db_mysql创建应用集
zabbix监控服务搭建mysql与nginx定制监控_第9张图片

对db_mysql创建监控项

zabbix监控服务搭建mysql与nginx定制监控_第10张图片
zabbix监控服务搭建mysql与nginx定制监控_第11张图片

创建图形

zabbix监控服务搭建mysql与nginx定制监控_第12张图片
zabbix监控服务搭建mysql与nginx定制监控_第13张图片

这样就可以查看图形了,图中的虚线是定义的触发器当超过这个线会触发报警

zabbix监控服务搭建mysql与nginx定制监控_第14张图片

这里对db_mysql主机定义一个若连接大于3则报警的触发器

zabbix监控服务搭建mysql与nginx定制监控_第15张图片
zabbix监控服务搭建mysql与nginx定制监控_第16张图片
zabbix监控服务搭建mysql与nginx定制监控_第17张图片
当连接大于大于或等于4的时候,触发灾难报警,显示如下则设置成功
zabbix监控服务搭建mysql与nginx定制监控_第18张图片

`

你可能感兴趣的:(Linux学习)