zoukankan      html  css  js  c++  java
  • zabbix安装

    [root@zabbix ~]# dd if=/dev/zero of=/dev/null bs=1M count=10
    10+0 records in
    10+0 records out
    10485760 bytes (10 MB) copied, 0.000965925 s, 10.9 GB/s
    
    

    一、监控基本概述

    参考网站

    zabbix中文官网

    1.什么是监控?

    1.监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环
    2.'事前'及时预警发现故障
    3.'事后'提供详细的数据用于追查定位问题
    

    2.为什么要做监控?

    1.系统的监控:实际上是对系统不间断的实时监控
    2.'实时'反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。
    3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行
    4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)
    

    3.主要的监控工具

    1.CACTI:'网络'监控,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具
    2.NAGIOS:'系统'监控,很久之前使用的,需要人为定义,没有图形,没有办法查询历史
    3.ZABBIX:分布式监控
    4.open-falcon:小米监控产品,开源的
    5.premethous:普罗米修斯,监控'容器',docker,K8S
    6.lepus:天兔,'数据库'监控
    

    4.怎么监控

    1.查看内存使用  free -m
    2.取出监控的值
    3.对比某个限制的值
    4.如果超过限制的值则告警
    

    5.监控的内容

    1.公有云:云监控,云平台自带的监控
    2.硬件监控:CPU温度,主板温度,磁盘,网卡,风扇转速
    3.系统监控:cpu,内存,网络,磁盘剩余
    4.服务监控:
        1)MySQL:主从复制是否有延迟(zabbix监控模板)
        2)redis:主从复制是否有延迟
        '监控思路':zabbix没有固定模板,可以在主库中set一个key为时间戳,然后从库会同步这个时间戳(动态),写脚本实时获取这两个时间戳,做对比。
        3)NFS:磁盘挂载状况
        4)tomcat:JVM监控,老年代、新生代、永久带、full-gc、垃圾回收
        5)rsync的同步情况,MD5校验文件是否被篡改
    5.web页面监控:请求时间,响应时间,加载时间,nginx状态码监控,pv,uv,ip
    6.网络监控:网卡流量(出入流量),带宽,'监控宝'
    7.业务监控:
    	1)URL监控 (curl)
    	2)api监控:针对业务的接口  (basic.action 登录接口)
    	3)nginx状态码 (curl)
    	4)tomcat日志监控 (elk)
    8.日志监控:ELK,第三方'日志易'
    9.安全监控:firewalld,WAF,牛盾云,安全狗
    10.容器监控:premethous,'普罗米修斯'
    
    #Page View(页面访问量)又叫做页面浏览量、点击量
    #Unique Visitor(独立访客),一般地,我们可以用两个数值标准来统计访问某网站的访客,即“访问次数”和“独立访客(问)数”
    #Internet Protocol(独立IP数),也称IP数,指1天内使用不同IP地址的用户访问网站的数量,同一IP无论访问了几个页面,独立IP数均为1
    

    二、脚本监控

    1.监控命令

    1)监控CPU

    w top htop uptime glances ps
    
    #不管用什么命令监控,查看CPU,我们都必须了解,系统的用户态和内核态。
    us: 用户态     跟用户的操作有关35%
    sy: 内核态     跟内核的处理有关65%
    id: CPU空闲
    
    #当我们执行一个命令的时候,很快能出来结果,但是有多少人知道,这个很快,他都占用了哪些时间呢?
    [root@web02 ~]# time ls
    real    0m0.002s       真实执行时间
    user    0m0.001s       用户执行时间
    sys     0m0.001s       系统执行时间
    

    2)监控内存

    free glances top htop
    

    3)监控磁盘

    df glances iotop iostat dstat
    
    #以兆为单位,每秒执行一次,执行10次
    [root@web02 ~]# iostat -dm 1 10
    

    4)网络监控

    glances ifconfig iftop ip route
    
    nethogs 该命令可以查看某个进程所使用的流量
    

    5)TCP11种状态监控命令

    netstat -ant
    ss -ant
    

    2.监控内存实例

    1)需求

    '每1分钟'监控当前系统的内存使用状态,如果可用'低于100MB'则发送邮件。同时'打印'当前还剩余多少内存
    
    #思路
    1.如何获取内存的状态信息 free -m
    2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'
    3.如何进行数字的比对,高于100MB不处理,低于100MB,发送邮件。
    4.如何每分钟执行。
    

    2)监控脚本

    [root@zabbix ~]# vim /scripts/free.sh
    #!/bin/bash
    Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
    while true
    do
    	Date=$(date +%F)
        Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
        if [ $Mem_Free -lt 100 ];then
            echo "$Date: $Hostname_Ip 内存可用量不足100M,当前剩余: $Mem_Free" |mail -s '内存不足' xxx
        else
            echo "$Date: $Hostname_Ip 内存可用量充足,当前剩余: $Mem_Free" |mail -s '内存不足' xxx
        fi
        sleep 60
    done
    

    3)思考

    随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生'oom'(out of memory)
    
    1.当系统内存不足时就会大量使用swap('虚拟内存')
    2.当系统大量使用swap的时候,'系统会特别卡'
    
    #web服务一般开启swap,尽量防止业务宕掉,数据库 容器一般关闭swap
    #少量使用swap可以暂时解决内存溢出的问题,当使用大量的虚拟内存的时候,系统卡慢
    #有时可能内存还有剩余300M或者500M,但是swap依然被使用
    

    4)新脚本

    [root@zabbix ~]# vim /scripts/free.sh
    #!/bin/bash
    Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
    while true
    do
    	Date=$(date +%F)
        Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
        Swap_used=$(free -m | awk '/^Swap/ {print $3}')
        if [ $Mem_Free -lt 100 -a $Swap_used -gt 100 ];then
            echo "$Date: $Hostname_Ip 内存可用量不足100M并且Swap空间占用超过100M,内存当前剩余: $Mem_Free,Swap空间使用达到: $Swap_used" |mail -s '内存不足' xxx
        fi
        sleep 60
    done
    

    3.磁盘监控实例

    [root@zabbix ~]# vim /scripts/df.sh
    #!/bin/bash
    Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
    while true
    do
        Date=$(date +%F)
        Disk_Used=$(df -h | awk '//$/ {print $5}')
        if [ ${Disk_Used%\%} -gt 90 ];then
            echo "$Date: $Hostname_Ip 磁盘可用量不足10%,当时已使用: $Disk_Used"
        fi
        sleep 60
    done
    
    # '${num%\%}' 可以从百分数里面取数字
    

    4.监控nginx进程

    #前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警
    
    #!/bin/bash
    nginx_process=`ps -ef|grep -c [n]ginx`
    if [ $nginx_process -lt 2 ];then
        echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" ****@qq.com
    fi
    

    5.注意

    #以上脚本监控,单台服务器或少量服务器可以使用,但是遇到大型架构服务器数量很多,使用该方法并不适用,所以我们要使用'第三方工具进行监控' zabbix
    
    zabbbix  1.0 ~ 5.0	 #版本范围
    zabbix		2.X		#版本太老,功能低下
    zabbix		3.X		#改动很多,增加新功能很多
    zabbix		4.X		#没有太多改动
    

    三、zabbix安装

    1.zabbix架构

    1.Zabbix agents '部署'在被监控目标上,用于主动监控本地资源和应用程序,并将'收集'的数据发送给 Zabbix server
    
    2.Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的'核心存储库'。
    
    3.数据库:所有配置信息以及 Zabbix 采集到的数据都被'存储'在数据库中
    
    4.zabbix web 为了从任何地方和'任何平台'轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
    
    5.Zabbix proxy 可以代替 Zabbix server'采集'性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的'分担'单个Zabbix server的负载。做'集群'的时候使用该模块
    

    2.配置官方源安装

    zabbix安装要求

    1)配置官方源

    [root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    
    [root@zabbix ~]# ll /etc/yum.repos.d/
    total 12
    -rw-r--r--. 1 root root 2523 Jul  6 22:19 CentOS-Base.repo
    -rw-r--r--. 1 root root  664 Jul  6 22:19 epel.repo
    -rw-r--r--  1 root root  633 Oct  7  2019 zabbix.repo
    

    2)开启仓库(选做)

    #Zabbix 前端需要额外的基础安装包。 您需要在运行 Zabbix 前端的系统中启用可选 rpms 的软件仓库
    
    #安装命令
    [root@zabbix ~]# yum install -y yum-utils
    [root@zabbix ~]# yum-config-manager --enable rhel-7-server-optional-rpms
    Loaded plugins: fastestmirror
    

    3)安装zabbix

    [root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-proxy
    

    3.第三方源安装

    1)配置第三方源

    [root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    

    2)安装zabbix

    [root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-proxy
    

    4.安装数据库

    [root@zabbix ~]# yum install -y mariadb-server
    

    5.配置数据库

    [root@zabbix ~]# systemctl start mariadb
    [root@zabbix ~]# systemctl enable mariadb
    
    [root@zabbix ~]# mysql
    MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
    MariaDB [(none)]> grant all on *.* to zabbix@'172.16.1.%' identified by 'zabbix';
    
    

    6.配置zabbix连接数据库

    [root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix
    
    #数据库配置不成功,会导致zabbix-server启动不了10051端口
    

    7.导入初始数据库

    [root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.24/create.sql.gz | mysql -u root -p zabbix
    
    [root@zabbix ~]# mysql
    MariaDB [(none)]> use zabbix
    MariaDB [zabbix]> show tables;
    ... ...
    144 rows in set (0.01 sec)
    
    # -p zabbix 表示连接指定库
    

    8.启动zabbix服务

    [root@zabbix ~]# systemctl start zabbix-server.service 
    [root@zabbix ~]# systemctl enable zabbix-server.service
    

    9.启动httpd

    #修改时区
    [root@zabbix ~]# vim /etc/httpd/conf.d/zabbix.conf
    php_value date.timezone Asia/Shanghai
    
    [root@zabbix ~]# systemctl start httpd
    [root@zabbix ~]# systemctl enable httpd
    

    10.web页面访问zabbix

    #浏览器访问
    http://10.0.0.71/zabbix/index.php
    
    #默认登录用户名密码:
    Admin
    zabbix
    

    11.启动agent

    [root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf 
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=172.16.1.71
    ServerActive=172.16.1.71
    Hostname=zabbix server
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    
    [root@zabbix ~]# systemctl start zabbix-agent.service
    

    四、监控一台远端主机

    1.安装zabbix客户端

    [root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.1-1.el7.x86_64.rpm
    

    2.配置客户端

    [root@web01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=172.16.1.71
    ServerActive=172.16.1.71
    Hostname=web01
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    
    #web01 需要在浏览器填写
    

    3.启动客户端

    [root@web01 ~]# systemctl start zabbix-agent.service 
    [root@web01 ~]# systemctl enable zabbix-agent.service
    
    #验证启动
    [root@web01 ~]# netstat -lntp     
    tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      39529/zabbix_agentd
    

    4.server端配置监控

    1.添加'主机组'
    2.创建主机
    3.选择'主机模板'
    4.添加主机
    

    五、数据库拆分

    img

    1.环境准备

    主机 IP 角色
    zabbix 172.16.1.71,10.0.0.71 zabbix-server
    db01 172.16.1.51 mysql

    2.搭建新的数据库

    [root@db01 ~]# yum install -y mariadb-server
    

    3.授权数据库

    [root@db01 ~]# systemctl start mariadb
    [root@db01 ~]# systemctl enable mariadb
    [root@db01 ~]# mysql
    MariaDB [(none)]> grant all on zabbix.* to zabbix@'172.16.1.%' identified by 'zabbix';
    Query OK, 0 rows affected (0.00 sec)
    

    4.导出源数据库数据

    [root@zabbix ~]# mysqldump -uroot -p -B zabbix > /tmp/zabbix.sql
    

    5.将数据导入新库 (scp rsync -h)

    [root@zabbix ~]# mysql -uroot -p -h172.16.1.51
    MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
    [root@zabbix ~]# mysql -uzabbix -p -h172.16.1.51 < /tmp/zabbix.sql 
    Enter password:
    

    6.修改zabbix连接数据库配置

    [root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
    DBHost=172.16.1.51
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix
    

    7.修改zabbix-web端数据库配置

    [root@zabbix ~]# vim /etc/zabbix/web/zabbix.conf.php 
    <?php
    // Zabbix GUI configuration file.
    global $DB;
    
    $DB['TYPE']     = 'MYSQL';
    #修改数据库地址
    $DB['SERVER']   = '172.16.1.51';
    $DB['PORT']     = '0';
    $DB['DATABASE'] = 'zabbix';
    $DB['USER']     = 'zabbix';
    #修改远程连接密码
    $DB['PASSWORD'] = 'zabbix';
    
    // Schema name. Used for IBM DB2 and PostgreSQL.
    $DB['SCHEMA'] = '';
    
    $ZBX_SERVER      = 'localhost';
    $ZBX_SERVER_PORT = '10051';
    $ZBX_SERVER_NAME = 'Linux脱产9期';
    
    $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
    

    8.重启访问

    [root@zabbix ~]# systemctl restart zabbix-server.service
    

    9.停止旧库

    [root@zabbix ~]# systemctl stop mariadb
    

    10.浏览器访问

  • 相关阅读:
    ado.net(增删改)
    窗体基础WINFORM
    SQL函数类的操作,增加,查询
    SQL数据库,增加查询修改以及防sql写入攻击
    SQL数据库--数据访问
    单列模式
    SQL数据库基础————委托
    SQL数据库基础知识——抽象类
    SQL数据库——静态成员
    面向对象
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13641460.html
Copyright © 2011-2022 走看看