点击展开更新日志

2025

title

xxxxx

nexttime

会有些什么呢(❁´◡`❁)

Komari 监控面板

Komari-轻量级的自托管服务器监控工具

源起

为了监控手上的几台的服务器,简单看一下内存硬盘网络的情况,最初是想要统计加到 Grafana 上的,毕竟之前弄好了嘛,但一时之间找不到合适的监控模板,于是干脆就用一个单独的模板来做监控得了。

最初是选择的 哪吒监控V1,实际部署之后发现个别使用 IPv4 节点会是不是断联,估计可能是 haproxy 和采集间隔的缘故,暂时不知道怎么改,兜兜转转换到了 Komari。一套下来感觉还不错,暂时选择了这套。

需求

如果是将 dashboard 部署在公网服务器上,操作会简单一点,可是呢,我想把 dashboard 部署在内网环境,主要还是因为使用场景基本都在内网,想要把所有容器统一管理起来,真要说有什么必要的理由貌似也没有。但这样就会引出一个新的问题,互联网上的服务器如何连接到内网的 dashboard,因此,一个公网地址是必要的。

到这里,整理一下我的部署需求:

  1. 内网部署,监控内网及互联网服务器(Linux, Windows)
  2. 容器部署
  3. 界面美观可自定义

根据部署过程中遇到的问题,实现以上需求的资源需求如下:

  • 【必需】公网地址:如果有IPv4最好,但至少要有 IPv6
  • 【必需】Docker环境:本地已安装Docker环境
  • 【可选】带公网IPv6的服务器:如果没有公网IPv4出口那么这个就是必需的,需要做中转。
  • 【推荐】SSH工具:既然都用Linux了,怎么没有一个趁手的工具呢

关于公网 IPv6 的检查,并非用 ip 命令看到存在 IPv6 就可以,需要用 ping -6 aliyun.com 检查是否可以ping通,才能说明该服务器 IPv6 是否支持对外访问,重点是服务器要能够访问 IPv6,否则也是徒劳。

比如阿里云的ECS虽然提供IPv6,支持IPv6访问,但服务器本身不能够访问外部IPv6地址,需要单独购买流量费。

环境

  • 内网服务器intA:具有公网IPv6,
  • 具有公网IPv6服务器extB
  • 阿里云服务器extC:不支持对外IPv6访问
  • 域名 data.example.com 已绑定到 extB 的地址

部署

Dashboard 部署

假设本地 Docker 环境已就绪,有顺畅访问 Github 及拉取 Docker 镜像的手段。

创建 compose 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
services:
komari:
image: ghcr.io/komari-monitor/komari:latest
container_name: komari
ports:
- "25774:25774"
volumes:
- ./data:/app/data
environment:
# 可选:自定义初始管理员账号
# ADMIN_USERNAME: admin
# ADMIN_PASSWORD: yourpassword
restart: unless-stopped

启动

1
docker compose up -d

获取账号密码

1
docker logs komari

查看日志获取登录用户名和密码。

登录管理页面

http://<IP>:25774

密码可能是做了限制不允许输入 / ,但是可以选择粘贴,因此:

  • 更改为不包含 / 的新密码
  • 利用密码管理工具记住自动填充

Nginx 反向代理

一般情况下自然不可能记端口访问,因此我们需要配置一层代理,以Openresty为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
# komari.xxx.top: 内网访问域名
# data.example.com: IPv4服务器探针上报域名
server_name komari.xxx.top data.example.com;

# SSL
ssl_certificate /usr/local/openresty/nginx/ssl/xxx.top.crt;
ssl_certificate_key /usr/local/openresty/nginx/ssl/xxx.top.pem;

# security
include nginxconfig.io/security.conf;

# logging
access_log /logs/access_komari.log cloudflare buffer=512k flush=1m;
error_log /logs/error_komari.log warn;

# reverse proxy
location / {
proxy_pass http://127.0.0.1:25774;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# WebSocket 代理
location /ws/ {
proxy_pass http://127.0.0.1:25774;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name komari.xxx.top;
return 301 https://komari.xxx.top$request_uri;
}

此时就能够用域名访问后台,后续探针上报地址也就使用域名了。

DDNS 配置

既然我们的服务部署在内网,想要公网上的服务器连接上,自然还需要有一个公网访问的地址:

  • 公网IPv4:
    • 这种情况下只需要将域名绑定到IP,后续就能够直接用域名部署代理了,不需要额外的操作,后续操作直接跳过。
  • 公网IPv6
    • 如果恰好和我一样只有v6的地址,就需要稍微折腾一下,以下操作仅针对只有公网IPv6的情况:
  1. 部署 ddns-go-jeessy2
  2. 将以上访问域名 komari.xxx.top 添加绑定
  3. 外网验证解析访问是否正常。

具体部署操作可以参考文档说明或者后面有空再补充。

手动部署代理——支持对外IPv6公网

对于extB服务器的情况:

  1. 具有公网IPv4
  2. 具有对外IPv6:
    1
    2
    3
    4
    5
    6
    7
    8
    root@Debian12:~# ping -6 aliyun.com
    PING aliyun.com(2401:b180:1:60::6 (2401:b180:1:60::6)) 56 data bytes
    64 bytes from 2401:b180:1:60::6 (2401:b180:1:60::6): icmp_seq=1 ttl=85 time=152 ms
    64 bytes from 2401:b180:1:60::6 (2401:b180:1:60::6): icmp_seq=2 ttl=85 time=152 ms
    ^C
    --- aliyun.com ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 152.093/152.106/152.119/0.013 ms

这种情况下可以直接配置:

  1. 登录到 komari 后台手动添加一个节点,复制部署指令
  2. SSH 登录到待部署代理服务器 extB,粘贴指令执行
  3. 安装完成后回到后台检查是否已获取节点信息,如果没有,使用命令查看代理启动日志排查:
    1
    systemctl status komari-agent

手动部署代理——不支持对外IPv6公网

如果对于extC服务器的情况:

1
2
3
[root@aliyun ~]# ping -6 aliyun.com
PING aliyun.com(2401:b180:1:60::5 (2401:b180:1:60::5)) 56 data bytes
...

直接执行部署指令是连接不上server的,因此需要找一个中间服务器做代理,比如 extB——有公网IPv4能够接收extC的请求,也能够访问只有 IPv6 的dashboard,因此部署步骤如下:

  1. 在 extB 上部署 haproxy(也可以选择Nginx,图简单我直接用TCP)
    因安装步骤写在这里略显冗余,放在另一篇了。
  2. 配置到 data.example.com 的转发配置,端口自定义,比如8080,如果有白名单配置也需要添加extC的IP到白名单,重启服务;
  3. 修改部署指令
    1
    bash <(curl -sL https://raw.githubusercontent.com/komari-monitor/komari-agent/refs/heads/main/install.sh) -e https://data.example.com:8080 -t abcdefg

    将内网的面板地址更换为绑定 extB 服务器的域名+端口

  4. 如果一切顺利,dashboard上应该就能看到了

手动部署代理-无root权限

此类情况适用于希望将 serv00 这样的服务器也加入监控,直接使用部署指令没有权限,而且脚本也没有支持 FreeBSD,因此只能手动下载 agent。

  1. 从 Github 找到对应的agent下载地址:https://github.com/komari-monitor/komari-agent/releases,比如选择 freebsd-amd64

  2. 下载到用户目录

    1
    2
    3
    mkdir -p application/komari-agent
    cd application/komari-agent
    wget https://github.com/komari-monitor/komari-agent/releases/download/1.0.62/komari-agent-freebsd-amd64
  3. 创建启动脚本

    1
    2
    3
    4
    5
    6
    7
    vim start-agent.sh

    # 添加以下内容

    #!/bin/bash

    /home/User/application/komari-agent/komari-agent-freebsd-amd64 -e https://data.example.com:8080 -t abcdefg12345 >> /home/User/application/komari-agent/komari-agent.log
  4. 启动脚本

    1
    2
    3
    chmod +x start-agent.sh
    ./start-agent.sh
    # pm2 start start-agent.sh --name komari

    pm2 的安装晚点补充

自动发现

参考:Agent 自动发现

对于需要批量部署和管理 Agent 实例,可以在管理后台生成自动发现密钥,使用以下命令安装 Agent:

1
2
3
4
5
6
7
8
9
10
11
12
# Linux/macOS
bash <(curl -sL https://raw.githubusercontent.com/komari-monitor/komari-agent/refs/heads/main/install.sh) \
-e <ENDPOINT> \
--auto-discovery <AD KEY> \
--disable-web-ssh \
--interval 5.0 \
--max-retries 5 \
--reconnect-interval 10 \
--info-report-interval 15

# Windows
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "iwr 'https://raw.githubusercontent.com/komari-monitor/komari-agent/refs/heads/main/install.ps1' -UseBasicParsing -OutFile 'install.ps1'; & '.\install.ps1' '-e' 'https://your-komari-server.com' '--auto-discovery' 'your-ad-key' '--disable-web-ssh' '--interval' '5.0' '--max-retries' '5' '--reconnect-interval' '10' '--info-report-interval' '15'"
  • -e, --endpoint komari 服务器地址,需要能够访问,比如: https://data.example.com:8080
  • --auto-discovery 自动发现密钥,用于批量注册 Agent

卸载代理

参考: Komari Agent 卸载指南

  1. 停止并禁用服务

    1
    2
    systemctl stop komari-agent
    systemctl disable komari-agent
  2. 删除服务文件

    1
    2
    rm /etc/systemd/system/komari-agent.service
    systemctl daemon-reload
  3. 删除安装文件

    1
    rm -rf /opt/komari /var/log/komari

一键删除:

1
sudo systemctl stop komari-agent && sudo systemctl disable komari-agent && sudo rm -f /etc/systemd/system/komari-agent.service && sudo systemctl daemon-reload && sudo rm -rf /opt/komari /var/log/komari