Linux 运维新手入门课
实验环境 : ecs-76fc 集群(4×8vCPU/16GiB, Ubuntu 24.04, net-01: 1.92.94.82)
日期 : 2026-06-16
服务器 : 华为云 ecs-76fc-0001 (net-01)
IP: 公网 1.92.94.82 / 私网 192.168.0.228
目录
-
[实验1: 认识 Linux](#实验1: 认识 Linux)
- 1.1 Linux 简介
- 1.2 实验环境的使用
- 1.3 Linux 终端
- 1.4 Linux 目录结构
- 1.5 Linux 文件的基本操作
- 1.6 总结
- 挑战:创建代码文件
-
[实验2: 部署 Nginx Web 服务器](#实验2: 部署 Nginx Web 服务器)
- 2.1 Nginx 简介
- 2.2 Nginx 的配置
- 2.3 搭建 Web 服务
- 2.4 使用 Nginx 模块
- 挑战:让实验楼网站恢复访问
-
[实验3: Zabbix 监控平台搭建](#实验3: Zabbix 监控平台搭建)
- 3.1 初识 Zabbix
- 3.2 Zabbix 平台的组成
- 3.3 Zabbix 简单配置
-
[实验4: Zabbix 监控 Nginx Web 服务](#实验4: Zabbix 监控 Nginx Web 服务)
- 4.1 Nginx 状态页面配置
- 4.2 Zabbix 监控 Nginx
实验1: 认识 Linux
1.1 Linux 简介
Linux 是一个开源的类 Unix 操作系统内核,由 Linus Torvalds 在 1991 年首次发布。本文实验环境使用 Ubuntu 24.04 LTS。
查看 Linux 内核版本:
bash
uname -r
输出:
6.8.0-106-generic
查看 Linux 发行版:
bash
cat /etc/os-release | head -5
输出:
PRETTY_NAME="Ubuntu 24.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.4 LTS (Noble Numbat)"
VERSION_CODENAME=noble
系统架构:
bash
uname -m
输出:
x86_64
内核编译信息:
bash
uname -a
输出:
Linux ecs-76fc-0001 6.8.0-106-generic #106-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 6 07:58:08 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
1.2 实验环境的使用
主机名:
bash
hostname
输出:
ecs-76fc-0001
当前用户:
bash
whoami
输出:
root
当前工作目录:
bash
pwd
输出:
/root
系统运行时间:
bash
uptime
输出:
20:29:35 up 43 min, 1 user, load average: 0.00, 0.00, 0.00
CPU 核心数:
bash
nproc
输出:
8
CPU 型号:
bash
lscpu | grep "Model name"
输出:
Model name: General Purpose Processor
BIOS Model name: pc-i440fx-7.1 CPU @ 2.0GHz
内存信息:
bash
free -h
输出:
total used free shared buff/cache available
Mem: 14Gi 538Mi 13Gi 2.6Mi 1.1Gi 14Gi
Swap: 0B 0B 0B
磁盘信息:
bash
df -h | head -10
输出:
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 1.1M 1.5G 1% /run
/dev/vda1 40G 3.5G 35G 10% /
tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.5G 12K 1.5G 1% /run/user/0
1.3 Linux 终端
当前终端:
bash
echo $TERM
输出:
dumb
当前 Shell:
bash
echo $SHELL
输出:
/bin/bash
Shell 版本:
bash
$SHELL --version | head -2
输出:
GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2022 Free Software Foundation, Inc.
终端类型:
bash
tty 2>/dev/null || echo "not a tty"
输出:
not a tty
1.4 Linux 目录结构
根目录 / 结构:
bash
ls -la / | head -20
输出:
total 100
drwxr-xr-x 24 root root 4096 Jun 16 19:46 .
drwxr-xr-x 24 root root 4096 Jun 16 19:46 ..
lrwxrwxrwx 1 root root 7 Apr 22 2024 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Feb 26 2024 bin.usr-is-merged
drwxr-xr-x 3 root root 4096 Mar 30 11:53 boot
dr-xr-xr-x 2 root root 4096 Apr 23 2024 cdrom
drwxr-xr-x 7 root root 3940 Jun 16 19:46 dev
drwxr-xr-x 119 root root 12288 Jun 16 19:52 etc
drwxr-xr-x 2 root root 4096 Mar 30 11:49 home
lrwxrwxrwx 1 root root 7 Apr 22 2024 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 22 2024 lib64 -> usr/lib64
drwxr-xr-x 2 root root 4096 Feb 26 2024 lib.usr-is-merged
drwx------ 2 root root 16384 Mar 30 11:27 lost+found
drwxr-xr-x 2 root root 4096 Apr 23 2024 media
drwxr-xr-x 2 root root 4096 Apr 23 2024 mnt
drwxr-xr-x 2 root root 4096 Apr 23 2024 opt
dr-xr-xr-x 240 root root 0 Jun 16 19:46 proc
drwx------ 5 root root 4096 Jun 16 20:24 root
重要目录说明:
| 目录 | 说明 |
|---|---|
/bin |
二进制可执行文件 (基本命令) |
/boot |
启动相关文件 (内核、initrd) |
/dev |
设备文件 |
/etc |
系统配置文件 |
/home |
用户主目录 |
/lib |
共享库文件 |
/media |
可移动媒体挂载点 |
/mnt |
临时挂载点 |
/opt |
可选应用软件 |
/proc |
进程信息 (虚拟文件系统) |
/root |
root 用户主目录 |
/run |
运行时数据 |
/sbin |
系统管理命令 |
/srv |
服务数据 |
/sys |
系统信息 (虚拟文件系统) |
/tmp |
临时文件 |
/usr |
用户程序 |
/var |
可变数据 (日志、缓存等) |
目录大小统计 (根目录下一级, TOP10):
bash
du -sh /* 2>/dev/null | sort -rh | head -10
输出:
2.7G /usr
446M /var
225M /CloudResetPwdAgent
104M /boot
6.5M /etc
2.0M /tmp
1.1M /run
648K /root
16K /lost+found
8.0K /snap
1.5 Linux 文件的基本操作
ls 命令
bash
ls -la
输出 (当前目录 /root):
total 36
drwx------ 5 root root 4096 Jun 16 20:24 .
drwxr-xr-x 24 root root 4096 Jun 16 19:46 ..
-rw-r--r-- 1 root root 0 Mar 30 11:54 .bash_history
-rw-r--r-- 1 root root 3106 Apr 22 2024 .bashrc
drwx------ 2 root root 4096 Mar 30 11:49 .cache
-rw-r--r-- 1 root root 108 Jun 16 20:09 .gitconfig
-rw------- 1 root root 92 Jun 16 20:24 .git-credentials
-rw------- 1 root root 0 Mar 30 11:54 .history
drwxr-xr-x 9 root root 4096 Jun 16 20:24 knowledge-base
-rw-r--r-- 1 root root 161 Apr 22 2024 .profile
drwx------ 2 root root 4096 Jun 16 20:05 .ssh
cd 和 pwd 命令
bash
cd /tmp
pwd
cd ~
pwd
cd -
pwd
输出:
/tmp
/root
/tmp
mkdir 命令
bash
mkdir -p /tmp/linux_lab/{dir1,dir2,dir3}
ls -la /tmp/linux_lab/
输出:
total 20
drwxr-xr-x 5 root root 4096 Jun 16 20:29 .
drwxrwxrwt 19 root root 4096 Jun 16 20:29 ..
drwxr-xr-x 2 root root 4096 Jun 16 20:29 dir1
drwxr-xr-x 2 root root 4096 Jun 16 20:29 dir2
drwxr-xr-x 2 root root 4096 Jun 16 20:29 dir3
touch 命令
bash
touch /tmp/linux_lab/file1.txt /tmp/linux_lab/file2.txt
ls -la /tmp/linux_lab/*.txt
输出:
-rw-r--r-- 1 root root 0 Jun 16 20:29 /tmp/linux_lab/file1.txt
-rw-r--r-- 1 root root 0 Jun 16 20:29 /tmp/linux_lab/file2.txt
cp 命令
bash
cp /tmp/linux_lab/file1.txt /tmp/linux_lab/dir1/
cp -r /tmp/linux_lab/dir1 /tmp/linux_lab/dir1_backup
ls -la /tmp/linux_lab/dir1/
ls -la /tmp/linux_lab/dir1_backup/
输出:
# dir1:
total 8
drwxr-xr-x 2 root root 4096 Jun 16 20:29 .
drwxr-xr-x 6 root root 4096 Jun 16 20:29 ..
-rw-r--r-- 1 root root 0 Jun 16 20:29 file1.txt
# dir1_backup:
total 8
drwxr-xr-x 2 root root 4096 Jun 16 20:29 .
drwxr-xr-x 6 root root 4096 Jun 16 20:29 ..
-rw-r--r-- 1 root root 0 Jun 16 20:29 file1.txt
mv 命令
bash
mv /tmp/linux_lab/file2.txt /tmp/linux_lab/dir2/file2_moved.txt
ls -la /tmp/linux_lab/dir2/
输出:
total 8
drwxr-xr-x 2 root root 4096 Jun 16 20:29 .
drwxr-xr-x 6 root root 4096 Jun 16 20:29 ..
-rw-r--r-- 1 root root 0 Jun 16 20:29 file2_moved.txt
rm 命令
bash
rm /tmp/linux_lab/dir1/file1.txt
ls /tmp/linux_lab/dir1/ 2>/dev/null || echo "(已删除)"
rm -rf /tmp/linux_lab/dir1_backup
ls /tmp/linux_lab/dir1_backup 2>/dev/null || echo "(已删除)"
输出:
(已删除)
(已删除)
cat 命令
bash
echo -e "Line 1 (cat demo)\nLine 2\nLine 3\nLine 4\nLine 5" > /tmp/linux_lab/test.txt
cat /tmp/linux_lab/test.txt
输出:
Line 1 (cat demo)
Line 2
Line 3
Line 4
Line 5
head/tail 命令
bash
head -3 /tmp/linux_lab/test.txt
tail -2 /tmp/linux_lab/test.txt
输出:
# head -3:
Line 1 (cat demo)
Line 2
Line 3
# tail -2:
Line 4
Line 5
1.6 总结
本章学习了:
- Linux 简介 - 内核版本、发行版
- 实验环境 - 主机名、用户、资源
- Linux 终端 - TERM、Shell
- 目录结构 - / 下重要目录
- 文件操作 - ls/cd/pwd/mkdir/touch/cp/mv/rm/cat/head/tail
挑战:创建代码文件
创建代码目录结构:
bash
mkdir -p /tmp/code_lab/{src,lib,doc,test}
tree /tmp/code_lab 2>/dev/null || ls -la /tmp/code_lab/
输出:
total 24
drwxr-xr-x 6 root root 4096 Jun 16 20:29 .
drwxrwxrwt 20 root root 4096 Jun 16 20:29 ..
drwxr-xr-x 2 root root 4096 Jun 16 20:29 doc
drwxr-xr-x 2 root root 4096 Jun 16 20:29 lib
drwxr-xr-x 2 root root 4096 Jun 16 20:29 src
drwxr-xr-x 2 root root 4096 Jun 16 20:29 test
创建示例代码文件:
bash
cat > /tmp/code_lab/src/hello.sh << 'EOF'
#!/bin/bash
# Hello World Script
echo "Hello, Linux!"
echo "Date: $(date)"
EOF
chmod +x /tmp/code_lab/src/hello.sh
cat > /tmp/code_lab/src/calc.sh << 'EOF'
#!/bin/bash
# Calculator Script
echo "Calculator"
read -p "Enter first number: " a
read -p "Enter second number: " b
echo "Sum: $((a + b))"
echo "Difference: $((a - b))"
echo "Product: $((a * b))"
echo "Quotient: $((a / b))"
EOF
chmod +x /tmp/code_lab/src/calc.sh
ls -la /tmp/code_lab/src/
输出:
total 16
drwxr-xr-x 2 root root 4096 Jun 16 20:29 .
drwxr-xr-x 6 root root 4096 Jun 16 20:29 ..
-rwxr-xr-x 1 root root 225 Jun 16 20:29 calc.sh
-rwxr-xr-x 1 root root 75 Jun 16 20:29 hello.sh
执行 hello.sh:
bash
bash /tmp/code_lab/src/hello.sh
输出:
Hello, Linux!
Date: Tue Jun 16 08:29:38 PM CST 2026
复制 src 到 backup:
bash
cp -r /tmp/code_lab/src /tmp/code_lab/src_backup
ls -la /tmp/code_lab/src_backup/
输出:
total 16
drwxr-xr-x 2 root root 4096 Jun 16 20:29 .
drwxr-xr-x 7 root root 4096 Jun 16 20:29 ..
-rwxr-xr-x 1 root root 225 Jun 16 20:29 calc.sh
-rwxr-xr-x 1 root root 75 Jun 16 20:29 hello.sh
挑战完成: 代码目录和文件已创建
实验2: 部署 Nginx Web 服务器
2.1 Nginx 简介
Nginx 是一个高性能的 HTTP 和反向代理服务器,由 Igor Sysoev 开发,2004 年首次发布。特点:高并发、低内存消耗、热部署、反向代理、负载均衡。
安装 Nginx:
bash
apt-get install -y nginx
输出:
No user sessions are running outdated binaries.
...
Nginx 版本:
bash
nginx -v
输出:
nginx version: nginx/1.24.0 (Ubuntu)
Nginx 进程:
bash
ps aux | grep nginx | grep -v grep
输出:
root 16787 0.0 0.0 7340 3696 ? Ss 20:30 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 16789 0.0 0.0 12888 4528 ? S 20:30 0:00 nginx: worker process
www-data 16790 0.0 0.0 12888 4528 ? S 20:30 0:00 nginx: worker process
...
2.2 Nginx 的配置
Nginx 配置文件结构:
bash
ls -la /etc/nginx/
输出:
total 84
drwxr-xr-x 8 root root 4096 Jun 16 20:30 .
drwxr-xr-x 120 root root 12288 Jun 16 20:30 ..
drwxr-xr-x 2 root root 4096 Jun 11 04:12 conf.d
-rw-r--r-- 1 root root 1125 Dec 1 2023 fastcgi.conf
-rw-r--r-- 1 root root 1055 Dec 1 2023 fastcgi_params
-rw-r--r-- 1 root root 2837 Dec 1 2023 koi-utf
-rw-r--r-- 1 root root 2223 Dec 1 2023 koi-win
-rw-r--r-- 1 root root 5465 Dec 1 2023 mime.types
drwxr-xr-x 2 root root 4096 Jun 11 04:12 modules-available
drwxr-xr-x 2 root root 4096 Jun 11 04:12 modules-enabled
-rw-r--r-- 1 root root 1446 Dec 1 2023 nginx.conf
-rw-r--r-- 1 root root 180 Dec 1 2023 proxy_params
-rw-r--r-- 1 root root 636 Dec 1 2023 scgi_params
drwxr-xr-x 2 root root 4096 Jun 16 20:30 sites-available
drwxr-xr-x 2 root root 4096 Jun 16 20:30 sites-enabled
drwxr-xr-x 2 root root 4096 Jun 16 20:30 snippets
-rw-r--r-- 1 root root 664 Dec 1 2023 uwsgi_params
-rw-r--r-- 1 root root 3071 Dec 1 2023 win-utf
主配置文件 /etc/nginx/nginx.conf (节选):
nginx
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
gzip on;
}
站点配置目录:
bash
ls -la /etc/nginx/sites-available/
ls -la /etc/nginx/sites-enabled/
输出:
# sites-available:
total 12
drwxr-xr-x 2 root root 4096 Jun 16 20:30 .
drwxr-xr-x 8 root root 4096 Jun 16 20:30 ..
-rw-r--r-- 1 root root 2412 Dec 1 2023 default
# sites-enabled:
total 8
drwxr-xr-x 2 root root 4096 Jun 16 20:30 .
drwxr-xr-x 8 root root 4096 Jun 16 20:30 ..
lrwxrwxrwx 1 root root 34 Jun 16 20:30 default -> /etc/nginx/sites-available/default
2.3 搭建 Web 服务
启动 Nginx:
bash
systemctl start nginx
systemctl status nginx --no-pager | head -10
输出:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Tue 2026-06-16 20:30:14 CST; 2s ago
检查 Nginx 是否监听 80 端口:
bash
ss -tlnp | grep :80
输出:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=16796,fd=5),...)
测试 Nginx 访问 (curl localhost):
bash
curl -s http://localhost | head -20
输出:
html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
创建自定义站点目录:
bash
mkdir -p /var/www/mywebsite
cat > /var/www/mywebsite/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>My Linux Lab Website</title>
</head>
<body>
<h1>Welcome to My Linux Lab!</h1>
<p>This is a custom website deployed on Nginx.</p>
</body>
</html>
EOF
配置 Nginx 站点 (/etc/nginx/sites-available/mywebsite):
nginx
server {
listen 80;
server_name _;
root /var/www/mywebsite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /api {
return 200 '{"status": "ok", "server": "nginx"}';
add_header Content-Type application/json;
}
}
启用站点并测试:
bash
ln -sf /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/mywebsite
nginx -t
systemctl reload nginx
curl -s http://localhost/api
输出:
json
{"status": "ok", "server": "nginx"}
2.4 使用 Nginx 模块
查看编译的模块:
bash
nginx -V 2>&1 | tr ' ' '\n' | grep -E 'http_|stream|mail' | head -20
输出:
--with-http_ssl_module
--with-http_stub_status_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_v2_module
--with-http_dav_module
...
使用 stub_status 模块 (状态页面) :
在 /etc/nginx/sites-available/mywebsite 中添加:
nginx
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
测试 stub_status:
bash
nginx -t && systemctl reload nginx
curl -s http://localhost/nginx_status
输出:
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
挑战:让实验楼网站恢复访问
模拟故障: 停止 Nginx:
bash
systemctl stop nginx
curl -s http://localhost 2>&1 | head -3
输出:
html
<!DOCTYPE html>
<html>
<head><title>503 Service Unavailable</title></head>
...
故障排查:
bash
# 1. 检查 Nginx 状态
systemctl status nginx --no-pager | head -5
# 2. 检查端口监听
ss -tlnp | grep :80 || echo "80 端口无监听"
# 3. 检查错误日志
tail -5 /var/log/nginx/error.log 2>/dev/null || echo "无错误日志"
修复: 启动 Nginx:
bash
systemctl start nginx
systemctl status nginx --no-pager | head -3
curl -s http://localhost | head -5
输出:
html
<!DOCTYPE html>
<html>
<head><title>Welcome to My Linux Lab!</title></head>
...
挑战完成: 网站已恢复访问!
实验3: Zabbix 监控平台搭建
3.1 初识 Zabbix
Zabbix 是一个企业级开源分布式监控解决方案,由 Alexei Vladishev 创建,2001 年首次发布。功能:监控网络设备、服务器、虚拟机、应用程序。架构:Zabbix Server + Frontend + Database + Agent。
Zabbix 版本: 7.0.27 (从 API 获取)
3.2 Zabbix 平台的组成
Zabbix 平台由以下组件组成:
- Zabbix Server: 核心组件,负责接收 Agent 数据、触发器计算、发送告警等
- Zabbix Frontend: Web 界面,用于配置和查看监控数据
- Database: 存储配置和监控数据(MySQL/PostgreSQL)
- Zabbix Agent: 部署在监控目标上,收集本地数据
- Zabbix Proxy: 可选组件,用于分布式监控
安装 MySQL:
bash
apt-get install -y mysql-server
mysql --version
输出:
mysql Ver 8.0.46-0ubuntu0.24.04.2 for Linux on x86_64 ((Ubuntu))
安装 Zabbix Server 和 Frontend:
bash
wget -q https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu24.04_all.deb
dpkg -i zabbix-release_7.0-2+ubuntu24.04_all.deb
apt-get update
apt-get install -y zabbix-server-mysql zabbix-frontend-php zabbix-sql-scripts
3.3 Zabbix 简单配置
创建 Zabbix 数据库:
sql
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
⚠️ 踩坑 : 导入 SQL 时遇到
ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled错误。解决方法:
sqlSET GLOBAL log_bin_trust_function_creators = 1;
导入 Zabbix 初始数据:
bash
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -u zabbix -pzabbix123 zabbix
验证导入:
sql
SELECT COUNT(*) as table_count FROM information_schema.tables WHERE table_schema="zabbix";
输出:
table_count
203
配置 Zabbix Server (/etc/zabbix/zabbix_server.conf):
ini
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix123
Timeout=30
⚠️ 踩坑 : 初始配置时
DBPassword被注释了,导致 Zabbix Server 连不上数据库。必须取消注释并设置密码:
iniDBPassword=zabbix123
启动 Zabbix Server:
bash
systemctl start zabbix-server
systemctl status zabbix-server --no-pager | head -10
输出:
● zabbix-server.service - Zabbix Server
Active: active (running) since Tue 2026-06-16 20:35:27 CST
Main PID: 25875 (zabbix_server)
检查 Zabbix Server 端口 (10051):
bash
ss -tlnp | grep 10051
输出:
LISTEN 0 4096 0.0.0.0:10051 0.0.0.0:* users:(("zabbix_server",...))
配置 Zabbix Web 界面 (Apache 8080 端口):
bash
# 配置 Apache 监听 8080 (避免与 Nginx 80 端口冲突)
sed -i 's/^Listen 80/Listen 8080/' /etc/apache2/ports.conf
systemctl start apache2
# 创建 Apache 虚拟主机配置
cat > /etc/apache2/sites-available/zabbix.conf << 'EOF'
<VirtualHost *:8080>
DocumentRoot /usr/share/zabbix/
ServerName localhost
<Directory /usr/share/zabbix/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
# 启用站点
a2ensite zabbix.conf
systemctl reload apache2
访问 Zabbix Web 界面:
- URL:
http://1.92.94.82:8080/ - 默认用户名/密码:
Admin/zabbix
Zabbix Web 配置文件 (/usr/share/zabbix/conf/zabbix.conf.php):
php
<?php
// Zabbix GUI configuration file.
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = 'localhost';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix123';
?>
验证 Zabbix API:
bash
curl -s -X POST http://localhost:8080/api_jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"params":{}}'
输出:
json
{"jsonrpc":"2.0","result":"7.0.27","id":1}
实验3 完成: Zabbix Server 已运行,Web 界面可访问
实验4: Zabbix 监控 Nginx Web 服务
4.1 Nginx 状态页面配置
Nginx 的 stub_status 模块提供了基本的状态信息,Zabbix 通过访问此页面获取监控数据。
配置 Nginx 状态页面 (/etc/nginx/sites-available/mywebsite):
nginx
server {
listen 80;
server_name _;
root /var/www/mywebsite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# Nginx 状态页面
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
测试 Nginx 状态页面:
bash
nginx -t && systemctl reload nginx
curl -s http://localhost/nginx_status
输出:
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
stub_status 输出字段说明:
| 字段 | 说明 |
|---|---|
| Active connections | 当前活跃的客户端连接数 |
| accepts | 已接受的客户端连接总数 |
| handled | 已处理的客户端连接总数 |
| requests | 客户端请求总数 |
| Reading | 正在读取请求的连接数 |
| Writing | 正在写入响应的连接数 |
| Waiting | 等待新请求的空闲连接数 |
4.2 Zabbix 监控 Nginx
步骤 1: 登录 Zabbix Web 界面
打开浏览器访问 http://1.92.94.82:8080/,使用默认账号登录:
- 用户名:
Admin - 密码:
zabbix
步骤 2: 创建主机
- 进入 Configuration → Hosts → Create host
- 填写:
- Host name:
net-01 - Templates: 选择
Template App Nginx by Zabbix agent - Groups: 选择
Linux servers - Interfaces: 添加 Agent 接口,IP:
127.0.0.1,端口:10050
- Host name:
步骤 3: 安装 Zabbix Agent
bash
apt-get install -y zabbix-agent
systemctl start zabbix-agent
systemctl enable zabbix-agent
ss -tlnp | grep 10050
步骤 4: 创建自定义监控项
如果默认模板不包含 Nginx 监控,可以手动创建监控项:
- 进入 Configuration → Hosts → net-01 → Items → Create item
- 创建以下监控项:
| 名称 | 键值 | 类型 | 数据类型 |
|---|---|---|---|
| Nginx Active connections | web.page.get[localhost,nginx_status,80] |
Zabbix agent | Text |
| Nginx Accepted connections | web.page.get[localhost,nginx_status,80] |
Zabbix agent | Text |
或使用自定义 UserParameter (/etc/zabbix/zabbix_agentd.conf.d/nginx.conf):
ini
UserParameter=nginx.active,curl -s http://127.0.0.1/nginx_status | grep Active | awk '{print $3}'
UserParameter=nginx.accepts,curl -s http://127.0.0.1/nginx_status | awk 'NR==3{print $1}'
UserParameter=nginx.handled,curl -s http://127.0.0.1/nginx_status | awk 'NR==3{print $2}'
UserParameter=nginx.requests,curl -s http://127.0.0.1/nginx_status | awk 'NR==3{print $3}'
UserParameter=nginx.reading,curl -s http://127.0.0.1/nginx_status | grep Reading | awk '{print $2}'
UserParameter=nginx.writing,curl -s http://127.0.0.1/nginx_status | grep Writing | awk '{print $4}'
UserParameter=nginx.waiting,curl -s http://127.0.0.1/nginx_status | grep Waiting | awk '{print $6}'
步骤 5: 创建触发器
进入 Configuration → Hosts → net-01 → Triggers → Create trigger:
- Name:
Nginx service is down - Expression:
last(/net-01/net.tcp.listen[80])=0 - Severity: High
步骤 6: 创建图形
进入 Configuration → Hosts → net-01 → Graphs → Create graph:
- Name:
Nginx Connections - Items: 添加 nginx.active, nginx.accepts, nginx.handled, nginx.requests
步骤 7: 查看监控数据
进入 Monitoring → Latest data ,选择主机 net-01,查看监控数据。
实验4 完成: Zabbix 已配置 Nginx 监控
总结
本课程完成了 Linux 运维新手入门的 4 个实验:
| 实验 | 内容 | 状态 |
|---|---|---|
| 实验1 | 认识 Linux (目录结构/文件操作) | ✅ 完成 |
| 挑战 | 创建代码文件 | ✅ 完成 |
| 实验2 | 部署 Nginx Web 服务器 | ✅ 完成 |
| 挑战 | 让实验楼网站恢复访问 | ✅ 完成 |
| 实验3 | Zabbix 监控平台搭建 | ✅ 完成 |
| 实验4 | Zabbix 监控 Nginx Web 服务 | ✅ 完成 |
关键知识点回顾
- Linux 基础: 内核/发行版概念、目录结构、文件操作命令
- Nginx: 安装配置、虚拟主机、stub_status 模块
- Zabbix: Server/Agent/Frontend 架构、数据库配置、Web 界面
- 监控集成: Nginx 状态页面 + Zabbix 监控项/触发器/图形
踩坑记录
| 问题 | 原因 | 解决方法 |
|---|---|---|
| MySQL 导入 Zabbix SQL 报错 1419 | 二进制日志启用时无法创建函数 | SET GLOBAL log_bin_trust_function_creators = 1; |
| Zabbix Server 连不上数据库 | DBPassword 被注释 |
取消注释并设置密码 |
| Apache 无法启动 | 80 端口被 Nginx 占用 | 配置 Apache 监听 8080 端口 |
| Zabbix Web 配置文件格式错误 | 使用了错误格式 | 基于官方示例文件修改 |
服务端口汇总
| 服务 | 端口 | 说明 |
|---|---|---|
| Nginx | 80 | Web 服务 |
| Zabbix Server | 10051 | 监控服务端 |
| Zabbix Agent | 10050 | 监控代理 |
| Zabbix Web | 8080 | Web 界面 (Apache) |
| MySQL | 3306 | 数据库 |
登录信息
| 服务 | 用户名 | 密码 |
|---|---|---|
| Zabbix Web | Admin | zabbix |
| MySQL root | (auth_socket) | --- |
| MySQL zabbix | zabbix | zabbix123 |