第十二周-云计算运维作业

civetcat / 2024-09-02 / 原文

  1. 总结zabbix安装过程(选择课程演示版本)。

1. 下载仓库
# wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
# dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
# apt update
2. 安装Zabbix server,Web前端,agent
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
3. 创建初始数据库
 mysql -uroot -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
改回变量
 mysql -uroot -p
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
4. 为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
DBPassword=password
5. 为Zabbix前端配置PHP
编辑配置文件 /etc/zabbix/nginx.conf uncomment and set 'listen' and 'server_name' directives.
listen 8080;
server_name example.com;
6. 启动Zabbix server和agent进程
重启Zabbix server和agent进程,并为它们设置开机自启:
# systemctl restart zabbix-server nginx 
# systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm

  1. 总结 zabbix主动模式和被动模式简介及实现

主动模式:在确认监控项后agent端按时间主动的打包数据发送到zabbix #提高了传输效率
被动模式:假如存在多个监控项,需要多次tcp连接才能获取

主动模式:

在 Zabbix Agent 配置主动模式
vim /etc/zabbix/zabbix_agentd.con

Server=192.168.1.139 #被动模式指向 Zabbix Server的IP或FQDN,默认模式,在主动
模式此项可选的,建议配置,否则ZBX显示红色
ServerActive=192.168.1.139    #主动模式指向 Zabbix Server的IP或FQDN
Hostname=192.168.1.139-rocky           #当前主机的IP,此项必须Zabbix Server中设置的主机名称相同,默认使用本机的主机名
HostnameItem=system.hostname    #也可以使用此system.hostname监控项自动生成主机名称,默认就是使用本机的主机名

使用主动模式需要将主机监控项也更改为主动模式的监控项

3. 总结 zabbix proxy主动及被动案例

zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控
数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server
收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix
server的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。

例子:
Ubuntu 安装 Zabbix Proxy 6.0

[root@ubuntu2204 ~]#wget 
https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbixrelease_6.0-4%2Bubuntu22.04_all.deb
[root@ubuntu2204 ~]#dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@ubuntu2204 ~]#sed -i.bak 
's/repo.zabbix.com/mirrors.tuna.tsinghua.edu.cn\/zabbix/' 
/etc/apt/sources.list.d/zabbix.list
[root@ubuntu2204 ~]#apt update
[root@ubuntu2204 ~]#apt -y install zabbix-proxy-mysql zabbix-sql-scripts

创建数据库和授权,导入数据结构

[root @zabbix -proxy-active ~] #apt -y install mysql-server
[root @zabbix -proxy-active ~] #mysql
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.17   |
+-----------+
1 row in set ( 0.00 sec)
mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin;
mysql> create user proxy @'localhost' identified by '123456' ;
mysql> grant all on zabbix_proxy_active.* to proxy @'localhost' ;
mysql> set global log_bin_trust_function_creators = 1 ;
mysql> quit ;
[root @zabbix -proxy-active ~] #zcat /usr/share/doc/zabbix-proxy
mysql/schema.sql.gz | mysql -uproxy -p123456 -h10.0.0.101 zabbix_proxy_active
[root @ubuntu2204 ~] #mysql
mysql> set global log_bin_trust_function_creators = 0 ;
mysql> exit

修改porx配置

[root@zabbix-proxy-active ~]#grep '^[^#]' /etc/zabbix/zabbix_proxy.conf 
ProxyMode=0                         #主动模式为0,被动模式为1,默认为0即主动模式
Server=10.0.0.100                   #指向Zabbix Server
Hostname=zabbix-proxy-active        #此名称必须和后面Web管理页的agent代理程序名称相同
DBHost=localhost                    #MySQL服务器地址
DBName=zabbix_proxy_active          #MySQL数据库名
DBUser=proxy                        #连接MySQL的用户
DBPassword=123456                   #连接MySQL的用户密码

在zabbi创建代理并在要监控的主机下使用代理

image

简图

image

4. 总结自定义监控,监控linux, nginx, 并基于短信/email报警。

定义模板 #比监控项灵活

  • 创建模板,模板必须属于某个主机组
  • 在模板中创建监控项、图形、触发器
  • 将模板关联到需要的对应主机
  • 可以通过将修改模板更改多个监控项
  • 导出和导入模板

监控项配置:

自定义监控项
cat /etc/zababix/zabbix_agentd.d/test.conf #建议自建文件

UserParameter=linux_use,df  | awk '$7 == "/" {print $5}' | sed 's/%//'
#=linux_use,df:自定义的键名
#df  | awk '$7 == "/" {print $5}' | sed 's/%//':这段命令用于获取根目录 / 的磁盘使用率

image
添加主机

image
添加监控项

部署监控nginx

apt update && apt -y install nginx | yum install -y nginx
vim /etc/nginx/sites-enabled/default #ubntu 
vim /etc/nginx/nginx.conf #redhat

# 添加下面三行, Zabbix 默认监控 /basic_status, 此处为 /status ,需要和 zabbix 的模板定义的路径要保持一致  
  location /status {
	  stub_status;
  }

image

添加自带的nginx监控模板

image

邮箱报警

在邮箱上开启SMTP功能,利用此邮箱实现发送报警邮件
创建报警媒介类型实现发信人功能:管理-->报警媒介类型-->创建报警媒介类型
image
报警类型,添加消息模板用于发送信息
image

定义收件人
image

定义发送事件
image#发送给组或人员
image#选择触发项(模板或触发器等)

5. 完成部署zabbix agent脚本,可适配rocky和ubuntu系统。

#!/bin/bash

# 定义 Zabbix server 的 IP 地址或主机名
ZABBIX_SERVER="192.168.1.139"
ZABBIX_AGENT_CONF="/etc/zabbix/zabbix_agentd.conf"

if [ -f /etc/os-release ]; then
	. /etc/os-release
	OS=$ID
	VERSION=$VERSION_ID
else
	echo "无法检测操作系统类型。"
	exit 1
fi

# 根据操作系统类型安装 Zabbix Agent
if [ "$OS" == "ubuntu" ]; then
	echo "检测到 Ubuntu 系统,开始安装 Zabbix Agent..."

	# 更新软件包列表
	apt-get update

	# 安装 Zabbix Agent
	wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
	dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
	apt-get update
	apt-get install -y zabbix-agent

elif [ "$OS" == "rocky" ]; then
	echo "检测到 Rocky Linux 系统,开始安装 Zabbix Agent..."

	# 安装 Zabbix Agent
	rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-5.el8.noarch.rpm
	dnf clean all
	dnf install -y zabbix-agent

else
	echo "不支持的操作系统:$OS"
	exit 1
fi

# 配置 Zabbix Agent

sed -i "s/^Server=.*/Server=$ZABBIX_SERVER/" $ZABBIX_AGENT_CONF
sed -i "s/^\s*ServerActive=.*/ServerActive=${ZABBIX_SERVER}/" $ZABBIX_AGENT_CONF
sed -i "s/^Hostname=.*/Hostname=$(hostname)/" $ZABBIX_AGENT_CONF

6. 完成命令行脚本,可以基于zabbix api添加zabbix agent到zabbix web。

ZABBIX_SERVER=test.org
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=192.168.1.133

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
	"host": "'web-api-$HOST'",
	"name": "'web-api-$HOST'",
	"interfaces": [
		{
		"type": 1,
		"main": 1,
		"useip": 1,
		"ip": "'$HOST'",
		"dns": "",
		"port": "10050"
		}
	],
	"groups": [ 
		{
			"groupid": "2" 
		}
	],
	"templates": [ 
		{
			"templateid": "10001" 
		} 
	]
 },
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

7. 基于课程演示,构建一个漂亮的granfana大盘。

image