# 系统巡检工具 v2

基于 `Shell + Go` 的模块化巡检工具，支持本地/远程巡检并输出 `Excel + JSON`。

## 一、功能概览

- 模块化：每个服务独立模块（`modules/*.sh`）
- 远程执行：统一通过 `remote/*.sh` 分发
- 配置驱动：使用 `config/hosts.conf`
- 告警能力：Excel 单元格标黄/标红，页签自动追加 `(告警)`

## 二、支持服务

| 服务 | 巡检内容 | 说明 |
|---|---|---|
| server | CPU/内存/磁盘、系统限制 | 支持多主机 |
| redis | 内存、连接数、集群状态 | 支持密码校验 |
| kafka | 进程/JVM、ZK健康度、集群健康度、Topic | 支持自定义端口 |
| mysql | 版本、字符集、连接、时区、隔离级别 | 含连接状态判定 |
| elasticsearch | 状态、JVM、IK、认证、节点信息 | 远程自动补 jq |
| nginx | worker_rlimit_nofile、worker_connections | worker_connections 可告警 |
| nacos | 状态、JVM、资源、DB、集群节点 | |
| clickhouse | 状态、内存配置、日志表空间、清理策略 | HTTP 8123 |
| k8s | K8s连接状态、Pod连接状态、Deployment/JVM/资源 | Pod 健康检查 `/healthCheck` |
| object_storage | MinIO/OSS/OBS/S3 状态与公共桶读写 | |
| dm (DM8) | 状态、列统计、大小写敏感、字符集、连接、表空间 | 当前仅 `local` 模式 |

## 三、目录结构

```text
system-inspect/
├─ inspect.sh
├─ config/
│  └─ hosts.conf
├─ modules/
│  ├─ *.sh                # 服务巡检模块
│  └─ dm/
│     ├─ main.go
│     ├─ go.mod
│     ├─ dm-collector-amd64
│     └─ dm-collector-arm64
├─ remote/
│  ├─ loader.sh
│  └─ *.sh                # 远程执行模块
└─ scripts/
   ├─ excel-gen.go
   ├─ excel-gen-amd64
   └─ excel-gen-arm64
```

## 四、配置文件（hosts.conf）

### 1）全局配置

```ini
global.ssh_user=root
global.ssh_port=22
global.ssh_timeout=10
```

### 2）服务配置示例

```ini
server.mode=remote
server.host=10.28.8.180,10.28.8.206

redis.mode=remote
redis.host=10.28.8.207:6379
redis.password=Seeyon123456

kafka.mode=remote
kafka.host=10.28.8.206:9092

mysql.mode=remote
mysql.host=10.28.8.208:3306
mysql.user=seeyon
mysql.password=Seeyon@321654

elasticsearch.mode=remote
elasticsearch.host=10.28.8.213:9200
elasticsearch.user=elastic
elasticsearch.password=Seeyon@321654

clickhouse.mode=remote
clickhouse.host=10.28.8.212:8123
clickhouse.user=default
clickhouse.password=Seeyon321654

k8s.mode=remote
k8s.host=10.28.8.180
k8s.namespace=seeyon-prd

object_storage.type=minio
object_storage.host=10.28.8.211:9000
object_storage.protocol=http
object_storage.access_key=admin
object_storage.secret_key=Seeyon321654
object_storage.bucket=seeyon-prd-public

dm.mode=local
dm.host=10.28.8.220:5236
dm.user=SYSDBA
dm.password=Dameng123
dm.schema=SYSDBA
dm.tablespace=SEEYONA9
```

> 说明：`-s` 支持大小写（内部统一转小写）。

## 五、执行方式

```bash
# 巡检全部已配置服务
bash inspect.sh -c config/hosts.conf

# 巡检指定服务
bash inspect.sh -c config/hosts.conf -s server -s redis -s mysql

# 指定输出前缀
bash inspect.sh -c config/hosts.conf -o my_inspection
```

### 本地执行示例（按服务）

```ini
# server
server.mode=local
server.host=localhost

# redis
redis.mode=local
redis.host=localhost:6379
redis.password=your_password

# kafka
kafka.mode=local
kafka.host=localhost:9092

# mysql
mysql.mode=local
mysql.host=localhost:3306
mysql.user=root
mysql.password=your_password

# elasticsearch
elasticsearch.mode=local
elasticsearch.host=localhost:9200
elasticsearch.user=elastic
elasticsearch.password=your_password

# nginx
nginx.mode=local
nginx.host=localhost

# nacos
nacos.mode=local
nacos.host=localhost:8848

# clickhouse
clickhouse.mode=local
clickhouse.host=localhost:8123
clickhouse.user=default
clickhouse.password=your_password

# k8s
k8s.mode=local
k8s.host=localhost
k8s.namespace=seeyon-prd

# object_storage（仅本地）
object_storage.type=minio
object_storage.host=localhost:9000
object_storage.protocol=http
object_storage.access_key=admin
object_storage.secret_key=your_password
object_storage.bucket=public-bucket

# dm（仅本地）
dm.mode=local
dm.host=localhost:5236
dm.user=SYSDBA
dm.password=your_password
dm.schema=SYSDBA
dm.tablespace=SYSTEM
```

## 六、告警规则（当前版本）

### 通用
- 状态类列：正常值统一为 `ok`，非 `ok` 按规则告警
- 页签出现任一告警时，页签名追加 `(告警)`

### 已配置阈值（重点）

- **SERVER**：CPU/内存/磁盘使用率 `>=80%` 黄、`>=90%` 红
- **REDIS**：
  - 状态列异常红
  - 内存使用率 `>=80%` 黄、`>=90%` 红
  - 连接使用率（当前/最大）`>=80%` 黄、`>=90%` 红
- **KAFKA**：
  - 主状态非 `ok` 红
  - ZK健康度包含 `异常/未配置` 红
  - 集群健康度异常红
  - JVM Xmx `<4G` 红
- **MYSQL**：
  - 版本包含 `mysql 未找到` 红
  - 字符集非 `utf8mb4` 红
  - 连接状态异常红
  - 事务隔离级别非 `READ-COMMITTED` 红
  - 时区对比包含 `不一致` 红
  - 大小写敏感非 `不敏感` 红
- **ES/NGINX/NACOS/CLICKHOUSE/OBJECT_STORAGE/K8S**：状态列非 `ok` 红
- **K8S**：
  - `K8s连接状态`、`Pod连接状态` 非 `ok` 红
  - `内存请求建议` 非 `ok` 黄
  - `对比结果` 仅 `✓ 一致` 不红
- **CLICKHOUSE**：
  - `worker_connections < 4096` 红
  - `清理策略` 为 `无清理策略` 红
  - `告警` 列异常红
- **OBJECT_STORAGE**：
  - 测试公共桶读写：`可写` 红；非 `只读` 黄
- **DM8**：
  - 列统计信息包含 `未定期收集` 红
  - 大小写敏感（`CASE_SENSITIVE()`）非 `0` 红
  - 字符集（`SF_GET_UNICODE_FLAG()`）非 `1` 红
  - 连接使用率、表空间使用率 `>=90%` 红
  - 自动扩容为 `NO/no/0` 红

## 七、依赖

- 基础：`bash`, `ssh`, `scp`, `curl`, `jq`
- 服务命令：`redis-cli`, `mysql`, `kubectl`, Kafka 脚本工具
- 对象存储：`mc`

## 八、编译（仅 Linux 目标）

### Excel 生成器

```bash
cd scripts
GOOS=linux GOARCH=amd64 go build -o excel-gen-amd64 excel-gen.go
GOOS=linux GOARCH=arm64 go build -o excel-gen-arm64 excel-gen.go
```

### DM8 采集器

```bash
cd modules/dm
GOOS=linux GOARCH=amd64 go build -o dm-collector-amd64 main.go
GOOS=linux GOARCH=arm64 go build -o dm-collector-arm64 main.go
```

> 备注：请确认上传到服务器的是 Linux ELF 二进制（非 Windows PE）。
