Zabbix-基础部署-数据库拆分-快速监控主机
1. 监控的基本概述
1.什么是监控
不管在我们运维工作生涯中,还是整体的架构的当中都是最重要的一部分。
事前及时预警发现故障,事后提供详细的故障报错,用于追查问题的原因。
2.为什么要进行监控
1. 对系统不间断的实时监控
2. 实时反馈当前系统状态
3. 保证服务可靠性和安全性
4. 保证业务持续稳定运行
3.如何进行监控,监控磁盘的使用率
1. 如何查看磁盘的使用率 df -h
2. 监控磁盘的哪些选项 block inode
3. 如何取出具体的值
4. 值多大才开始进行报警 峰值是多少
4.流行的一些监控工具
1.zabbix 分布式监控:硬件 系统 网络 服务 业务 图形 趋势图 模板
2.cacti 网络监控
3.nagios 系统监控:需要人为定义,没有比较好的图形,也没有办法查询历史趋势图。
4.天兔Lepus 数据库监控
5.Open-Falcon 小米开发的 开源
6.Prometheus 普罗米修斯 专门 k8s docker
5. 面试题:刚入职一家新公司,如何进行入手监控
从业务角度考虑,进行针对性的监控
1. 硬件监控 路由器 交换机 防火墙 CPU的温度
2. 系统监控 CPU 内存 磁盘 网络 进程 TCP
3. 服务监控 nginx PHP mysql redis
4. web监控 网站的请求时间 响应时间 加载数据的时间
5. 日志监控 ELK 收集数据 日志易
6. 安全监控 防火墙 WAF 安全宝 牛盾云 安全狗
7. 网络监控 第三方 监控宝
8. 业务监控 项目 引入多少流量 产生多少注册量 给带来多少价值 效益
9. API监控 针对业务的接口
10. 分布式监控 多机房
11. 自动化监控 网络发现 自动注册 主动模式 被动模式
12. 公有云 云监控 云平台自带的
2. 单机时代如何进行监控
1. CPU监控命令: w、top、htop、glances
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
st — 这个虚拟机被hypervisor(虚拟机监视器)偷去的CPU时间
2. 内存监控命令: free
[root@ZabbixServer ~]# free -m
total used free shared buff/cache available
Mem: 974 440 194 4 340 328
Swap: 2047 11 2036
3. 磁盘监控命令: df、iotop、iostat、dstat
[root@ZabbixServer ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
4. 网络监控命令: ifconfig、route、glances、iftop、nethogs
[root@ZabbixServer ~]# iftop
bgx.com:https => 101.200.101.219:57456 0b 9.53Kb 6.11Kb
<=
bgx.com:https => 101.200.101.207:65254 0b 3.37Kb 1.12Kb
#中间的<= =>这两个左右箭头,表示的是流量的方向。
TX: cum: 170KB #发送流量
RX: 37.1KB #接收流量
TOTAL: 208KB #总的流量
#如果单位为Mbps,换算为MB需要除以8,比如:100Mbps = 12MB
5. TCP11状态监控netstat
[root@ZabbixServer ~]# netstat -an|grep ESTABLISHED
[root@ZabbixServer ~]# netstat -lntup
6. 那单机时代,如何使用shell脚本来实现服务器的监控,比如: 每隔1分钟监控一次内存,当你的可用内存低于100m,发邮件报警,要求显示剩余内存,具体实现思路如下:
1.怎么获取内存可用的值free -m|awk '/^Mem/{print $NF}'
2.获取到内存可用的值如何和设定的阈值进行比较
3.比较如果大于100m则不处理,如果小于100则报警
4.如何每隔1分钟执行一次
[root@ZabbixServer ~]# cat free.sh
#!/usr/bin/bash
HostName=$(hostname)_$(hostname -i)
Date=$(date +%F)
while true
do
Free=$(free -m|awk '/^Mem/{print $NF}')
if [ $Free -le 100 ];then
echo "$Date: $HostName Mem Is < ${Free}MB"
fi
sleep 5
done
7. 随着时间的推移,用户不断的增多,服务消耗的内存越来越多,当系统内存不足的时候可能会导致系统产生oom(out of memory)
1.当系统内存不足的时候就会大量使用swap
2.当系统大量使用swap的时候,系统会特别卡
注意: 有时可能内存还有剩余300Mb-500Mb,但会发现swap依然被使用
[root@ZabbixServer ~]# dd if=/dev/zero of=/dev/null bs=800M
#故障日志
[root@ZabbixServer ~]# tail -f /var/log/messages
Out of memory: Kill process 2227 (dd) score 778 or sacrifice child
Killed process 2227 (dd) total-vm:906724kB, anon-rss:798820kB, file-rss:0kB
8. 引入Zabbix
1.单台服务器如何去查看系统的指标 cpu 内存
磁盘
网路IO
2.几台服务器的情况如何去监控 shell-->系统命令(取值)-->比对是否达到设定阈值-->通知。
3.借助第三方工具来实现监控:zabbix
zabbix版本
zabbix 1.8 2.0 2.2 2.4 3.0 3.2 3.4 3.5 4.0 4.2 测试版
2 --> 3 改动非常的大
3 --> 4 改动非常小
课程内容使用4.0版本。
3. Zabbix的安装
准备一台服务器 内存 2G 磁盘 >50G
#zabbix官方手册
https://www.zabbix.com/documentation/4.0/zh/manual
#1.配置zabbix的官方仓库
[root@zabbix-server ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
#2.Zabbix 前端需要额外的基础安装包。 您需要在运行 Zabbix 前端的系统中启用可选 rpms 的软件仓库
[root@zabbix-server ~]# yum install -y yum-utils
[root@zabbix-server ~]#
[root@zabbix-server ~]# yum-config-manager --enable rhel-7-server-optional-rpms
#3.安装zabbix服务端
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-server-mysql-4.0.18-1.el7.x86_64.rpm
https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-web-mysql-4.0.18-1.el7.noarch.rpm
https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-web-4.0.18-1.el7.noarch.rpm
#4.配置数据库
[root@zabbix-server ~]# systemctl start mariadb.service
[root@zabbix-server ~]# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
#5. 初始化数据库,进行导入数据
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.18/create.sql.gz | mysql -uzabbix -pzabbix zabbix
#6.编辑zabbix-server配置文件
[root@zabbix-server ~]# grep '^DB' /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
#7.启动zabbix-server 并加入开机自启动
[root@zabbix-server ~]# systemctl start zabbix-server.service
[root@zabbix-server ~]# systemctl enable zabbix-server.service
#8. 修改时区
[root@zabbix-server ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
#9. 启动web
[root@zabbix-server ~]# systemctl start httpd.service
[root@zabbix-server ~]# systemctl enable httpd.service
#10. 使用IP地址进行浏览器上面进行访问
10.0.0.100/zabbix
#所有web界面安装的配置信息保存在这个文件里面
[root@zabbix-server ~]# ll /etc/zabbix/web/zabbix.conf.php
#启动服务端的zabbix客户端
[root@zabbix-server ~]# systemctl start zabbix-agent.service
[root@zabbix-server ~]# systemctl enable zabbix-agent.service








4. Zabbix快速监控主机
#1.安装客户端
[root@web01 ~]# yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.18-1.el7.x86_64.rpm
#2.编写配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
[root@web01 ~]# grep '^Server' /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
#3.启动客户端
[root@web01 ~]# systemctl start zabbix-agent.service
[root@web01 ~]# systemctl enable zabbix-agent.service
[root@web01 ~]# netstat -lntp| grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 7891/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 7891/zabbix_agentd






5. Zabbix基础架构
Zabbix-agent(数据采集) --》zabbix-server(数据分析,报警)--》数据库(数据存储)《--zabbix-web(数据展示)
LAMP + zabbix
LAP + MySQL
[root@zabbix-server ~]# ll /etc/zabbix/zabbix_server.conf
-rw-r----- 1 root zabbix 17393 2020-03-23 11:29 /etc/zabbix/zabbix_server.conf
[root@zabbix-server ~]# ll /etc/zabbix/web/zabbix.conf.php
-rw-r--r-- 1 apache apache 443 2020-03-23 11:55 /etc/zabbix/web/zabbix.conf.php
6. Zabbix数据库拆分
mysql 10.0.0.51
#1.安装数据库
[root@db01 ~]# yum install -y mariadb-server mariadb
#2.启动数据库
[root@db01 ~]# systemctl enable mariadb.service
[root@db01 ~]# systemctl start mariadb.service
#3.创建数据库
[root@db01 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'172.16.1.%' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
#4.在原有的数据库里面,进行备份
[root@zabbix-server ~]# mysqldump -uroot --single-transaction --databases zabbix >zabbix.sql
[root@zabbix-server ~]# ll
total 3240
-rw-------. 1 root root 1558 2019-05-08 18:33 anaconda-ks.cfg
-rw-r--r-- 1 root root 451 2020-03-23 10:18 free.sh
-rw-r--r-- 1 root root 513 2019-12-07 11:36 hostname_ip.sh
-rw-r--r-- 1 root root 3305241 2020-03-23 16:02 zabbix.sql
#5.将备份好的数据传输到新的数据库,并导入数据
[root@zabbix-server ~]# scp -rp zabbix.sql root@10.0.0.51:
[root@db01 ~]# mysql -h 172.16.1.51 -uzabbix -pzabbix zabbix <zabbix.sql
#如果出现反向解析问题,需修改数据库配置文件
[root@db01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip_name_resolve #加入此行内容
#重启数据库
[root@db01 ~]# systemctl restart mariadb.service
#6.在进行配置zabbix服务端数据库配置
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
[root@zabbix-server ~]# grep '^DB' /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
[root@zabbix-server ~]# systemctl restart zabbix-server.service
[root@zabbix-server ~]# vim /etc/zabbix/web/zabbix.conf.php
[root@zabbix-server ~]# cat /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';
[root@zabbix-server ~]# systemctl httpd.service
[root@zabbix-server ~]# systemctl stop mariadb.service