Linux 运维新手入门课

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. [实验1: 认识 Linux](#实验1: 认识 Linux)

    • 1.1 Linux 简介
    • 1.2 实验环境的使用
    • 1.3 Linux 终端
    • 1.4 Linux 目录结构
    • 1.5 Linux 文件的基本操作
    • 1.6 总结
    • 挑战:创建代码文件
  2. [实验2: 部署 Nginx Web 服务器](#实验2: 部署 Nginx Web 服务器)

    • 2.1 Nginx 简介
    • 2.2 Nginx 的配置
    • 2.3 搭建 Web 服务
    • 2.4 使用 Nginx 模块
    • 挑战:让实验楼网站恢复访问
  3. [实验3: Zabbix 监控平台搭建](#实验3: Zabbix 监控平台搭建)

    • 3.1 初识 Zabbix
    • 3.2 Zabbix 平台的组成
    • 3.3 Zabbix 简单配置
  4. [实验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 总结

本章学习了:

  1. Linux 简介 - 内核版本、发行版
  2. 实验环境 - 主机名、用户、资源
  3. Linux 终端 - TERM、Shell
  4. 目录结构 - / 下重要目录
  5. 文件操作 - 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 平台由以下组件组成:

  1. Zabbix Server: 核心组件,负责接收 Agent 数据、触发器计算、发送告警等
  2. Zabbix Frontend: Web 界面,用于配置和查看监控数据
  3. Database: 存储配置和监控数据(MySQL/PostgreSQL)
  4. Zabbix Agent: 部署在监控目标上,收集本地数据
  5. 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 错误。解决方法:

sql 复制代码
SET 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 连不上数据库。必须取消注释并设置密码:

ini 复制代码
DBPassword=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: 创建主机
  1. 进入 Configuration → Hosts → Create host
  2. 填写:
    • Host name: net-01
    • Templates: 选择 Template App Nginx by Zabbix agent
    • Groups: 选择 Linux servers
    • Interfaces: 添加 Agent 接口,IP: 127.0.0.1,端口: 10050
步骤 3: 安装 Zabbix Agent
bash 复制代码
apt-get install -y zabbix-agent
systemctl start zabbix-agent
systemctl enable zabbix-agent
ss -tlnp | grep 10050
步骤 4: 创建自定义监控项

如果默认模板不包含 Nginx 监控,可以手动创建监控项:

  1. 进入 Configuration → Hosts → net-01 → Items → Create item
  2. 创建以下监控项:
名称 键值 类型 数据类型
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 服务 ✅ 完成

关键知识点回顾

  1. Linux 基础: 内核/发行版概念、目录结构、文件操作命令
  2. Nginx: 安装配置、虚拟主机、stub_status 模块
  3. Zabbix: Server/Agent/Frontend 架构、数据库配置、Web 界面
  4. 监控集成: 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
相关推荐
载数而行5201 小时前
Linux 9 服务管理(进程的一种)
linux
正经教主1 小时前
【docker基础】第十周:CI/CD集成
运维·docker·容器
追梦的小菜2 小时前
linux 下磁盘挂载
linux
rabbit_pro2 小时前
Nginx配置维护模式
运维·nginx
izcll2 小时前
ubuntu系统安装软件的方法
linux·运维·ubuntu
森G2 小时前
78、框架分析------服务器源码解析----云视频服务项目
服务器·c++·qt
云飞云共享云桌面10 小时前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
JAVA面经实录91711 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
小刘|12 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端