#docker #monitoring #automation #container-image #uptime-kuma #automate

app autokuma

根据 Docker 容器标签自动创建 Uptime Kuma 监视器

5 个版本 (重大变更)

新版本 0.8.0 2024 年 8 月 22 日
0.7.0 2024 年 7 月 15 日
0.6.0 2024 年 4 月 28 日
0.5.0 2024 年 4 月 13 日
0.0.3 2024 年 4 月 2 日

#271 in 命令行工具

每月 26 次下载

MIT 许可证

200KB
4.5K SLoC

AutoKuma 🐻 Crates.io 版本

AutoKuma 是一个工具,可以根据 Docker 容器标签自动创建 Uptime Kuma 监视器。使用 AutoKuma,您可以在 Uptime Kuma UI 中消除手动创建监视器的需求。

如何安装 📦

支持的平台

平台 架构 Docker 镜像 预构建的二进制文件 注意
Windows x64 ⛔︎
Windows arm64 ⛔︎ ⛔︎
Linux x64
Linux arm64 ⚠️* ⛔︎ 实验性/仅发布构建
Mac x64 ⛔︎ ⛔︎
Mac arm64 ⛔︎ ⚠️* 实验性

为 windows、linux 和 mac 提供了二进制文件,可在 GitHub 发布 中找到,此外 AutoKuma 还可在 GitHub 容器注册表(GHCR) 上作为 Docker 容器使用。要安装,只需使用以下命令拉取容器:

最新发布版

docker pull ghcr.io/bigboot/autokuma:latest

开发版本

docker pull ghcr.io/bigboot/autokuma:master

❗ 开发版本可能存在破坏或不警告的破坏性更改,不建议在生产系统上使用。

示例 Docker Compose 🚀

以下是一个 docker-compose.yml 示例

version: '3'

services:
  autokuma:
    image: ghcr.io/bigboot/autokuma:latest
    restart: unless-stopped
    environment:
      AUTOKUMA__KUMA__URL: http://localhost:3001
      # AUTOKUMA__KUMA__USERNAME: <username> 
      # AUTOKUMA__KUMA__PASSWORD: <password>
      # AUTOKUMA__KUMA__MFA_TOKEN: <token>
      # AUTOKUMA__KUMA__HEADERS: "<header1_key>=<header1_value>,<header2_key>=<header2_value>,..."
      # AUTOKUMA__KUMA__CALL_TIMEOUT: 5
      # AUTOKUMA__KUMA__CONNECT_TIMEOUT: 5
      # AUTOKUMA__TAG_NAME: AutoKuma
      # AUTOKUMA__TAG_COLOR: "#42C0FB"
      # AUTOKUMA__DEFAULT_SETTINGS: |- 
      #    docker.docker_container: {{container_name}}
      #    http.max_redirects: 10
      #    *.max_retries: 3
      # AUTOKUMA__SNIPPETS__WEB: |- 
      #    {{container_name}}_http.http.name: {{container_name}} HTTP
      #    {{container_name}}_http.http.url: https://{{@0}}:{{@1}}
      #    {{container_name}}_docker.docker.name: {{container_name}} Docker
      #    {{container_name}}_docker.docker.docker_container: {{container_name}}
      # AUTOKUMA__DOCKER__HOSTS: unix:///var/run/docker.sock
      # AUTOKUMA__DOCKER__LABEL_PREFIX: kuma
      
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

配置 🔧

AutoKuma 可以使用以下环境变量/配置键进行配置

环境变量 配置键 描述
AUTOKUMA__STATIC_MONITORS static_monitors AutoKuma 将在其中搜索静态监视器定义的文件夹路径
AUTOKUMA__TAG_NAME tag_name AutoKuma 标签的名称,用于跟踪管理的容器
AUTOKUMA__TAG_COLOR tag_color AutoKuma 标签的颜色
AUTOKUMA__DEFAULT_SETTINGS default_settings 默认设置应用于所有生成的监视器,请参阅上面的示例了解语法
AUTOKUMA__LOG_DIR log_dir 日志文件存储的目录路径
AUTOKUMA__ON_DELETE on_delete 指定如果找不到 autokuma id 时监视器应如何处理,可以是 deletekeep
AUTOKUMA__SNIPPETS__<SNIPPET> snippets.<snippet> 定义一个名为 <snippet> 的代码片段,请参阅 代码片段 了解详细信息
AUTOKUMA__KUMA__URL kuma.url AutoKuma 应用于连接到 Uptime Kuma 的 URL
AUTOKUMA__KUMA__USERNAME kuma.username 登录 Uptime Kuma 的用户名(除非禁用身份验证,否则是必需的)
AUTOKUMA__KUMA__PASSWORD kuma.password 登录 Uptime Kuma 的密码(除非禁用身份验证,否则是必需的)
AUTOKUMA__KUMA__MFA_TOKEN kuma.mfa_token 登录 Uptime Kuma 的 MFA 令牌(如果启用了 MFA 则必需)
AUTOKUMA__KUMA__HEADERS kuma.headers 连接到 Uptime Kuma 时发送的 HTTP 头列表
AUTOKUMA__KUMA__CONNECT_TIMEOUT kuma.connect_timeout 与 Uptime Kuma 的初始连接超时时间
AUTOKUMA__KUMA__CALL_TIMEOUT kuma.call_timeout 对 Uptime Kuma 服务器执行调用时的超时时间
AUTOKUMA__DOCKER__HOSTS docker.hosts Docker 主机列表。使用分号分隔的字符串来设置使用环境变量。
AUTOKUMA__DOCKER__LABEL_PREFIX docker.label_prefix 扫描容器标签时使用的前缀
AUTOKUMA__DOCKER__SOURCE docker.source 监视器应从 containerservice 标签(或 both)创建。
AUTOKUMA__DOCKER__TLS__VERIFY docker.tls.verify 是否验证 TLS 证书。
AUTOKUMA__DOCKER__TLS__CERT docker.tls.cert PEM 格式自定义 TLS 证书的路径。

AutoKuma 将从当前目录以及以下位置读取配置文件,文件名为 autokuma.{toml,yaml,json}

平台 示例
Linux $XDG_CONFIG_HOME/autokuma/config.{toml,yaml,json} /home/alice/.config/autokuma/config.toml
macOS $HOME/Library/Application Support/autokuma/config.{toml,yaml,json} /Users/Alice/Library/Application Support/autokuma/config.toml
Windows %LocalAppData%\\autokuma\\config.{toml,yaml,json} C:\\Users\\Alice\\AppData\\Local\\autokuma\\config.toml

以下是一个示例 .toml 配置

[kuma]
url = "http://localhost:3001/"
username = "<username>"
password = "<password>"

用法 💡

AutoKuma 以以下格式解释 Docker 容器标签

<prefix>.<id>.<type>.<setting>: <value>
  • <prefix>: 默认为 kuma,除非使用 DOCKER__LABEL_PREFIX 环境变量更改。
  • <id>: 监视器的唯一标识符(确保在所有监视器之间唯一)。
  • <type>:在 Uptime Kuma 中配置的监控器的类型。
  • <setting>:要设置的值的键。
  • <value>:选项的值。

标签根据 <id> 分组到一个监控器中。例如,要创建一个简单的 HTTP 监控器,请使用以下标签

kuma.example.http.name: "Example"
kuma.example.http.url: "https://example.com"

查看所有可用的监控器类型及其相应的设置:所有可用的监控器类型

AutoKuma 还提供创建和分配组的功能

kuma.mygroup.group.name: "This is a Group"
kuma.mymonitor.http.name: "This is a Monitor assigned to a Group"
kuma.mymonitor.http.parent_name: "mygroup"
kuma.mymonitor.http.url: "https://example.com"

AutoKuma 允许在标签和 片段 中使用 Tera 模板,以下变量可用

模板 描述 示例值
容器
container_id 容器 ID 92366941fb1f211c573c56d261f3b3e5302f354941f2aa295ae56d5781e97221
image_id 容器镜像的 Sha256 sha256:c2e38600b252f147de1df1a5ca7964f9c8e8bace97111e56471a4a431639287a
image 容器镜像名称 ghcr.io/immich-app/immich-server:release
container_name 容器名称 immich-immich-1
container 包含容器详细信息的嵌套结构 有关可用数据的更多信息,请参阅 Docker 引擎文档
服务
service 包含服务详细信息的嵌套结构 有关可用数据的更多信息,请参阅 Docker 引擎文档

片段 📝

警告:片段目前是实验性的,将来可能会更改。

AutoKuma 提供了定义可重用片段的功能。片段需要在配置中定义,例如,使用环境变量

AUTOKUMA__SNIPPETS__WEB: |-
    {{ container_name }}_http.http.name: {{ container_name }} HTTP
    {{ container_name }}_http.http.url: https://{{ args[0] }}:{{ args[1] }}
    {{ container_name }}_docker.docker.name: {{ container_name }} Docker
    {{ container_name }}_docker.docker.docker_container: {{ container_name }}

或在等效的 TOML 配置文件中

[snippets]
web = '''
    {{ container_name }}_http.http.name: {{ container_name }}
    {{ container_name }}_http.http.url: https://{{ args[0] }}:{{ args[1] }}
    {{ container_name }}_docker.docker.name: {{ container_name }}_docker
    {{ container_name }}_docker.docker.docker_name: {{ container_name }}
'''

这些定义了一个名为 web 的片段。

片段可以有可变数量的参数,这些参数可以通过 {{ args[0] }}{{ args[1] }}{{ args[2] }} 等方式使用,如上所示。

要在容器上使用片段,请以以下格式分配标签

<prefix>.__<snippet>: <arguments>

例如,可以使用以下标签包含上述片段

kuma.__web: '"example.com", 443'

片段也使用 Tera,这允许使用一些相当高级的模板,以下是上述示例的扩展版本

{# Assign the first snippet arg to args to make access easier #}
{% set args = args[0] %}

{# Generate an autokuma id by slugifying the "name" arg #}
{% set id = args.name | slugify %}

{# if we have a "keyword" generate a "keyword" monitor, otherwise generate a "http" monitor #}
{% if args.keyword %}
    {% set type = "keyword" %}
{% else %}
    {% set type = "http" %}
{% endif %}


{# below are the actual lines which end up defining the monitor #}
{{ id }}-group.group.name: {{ args.name }}
{{ id }}-http.{{ type }}.name: {{ args.name }} (HTTP)
{{ id }}-http.{{ type }}.parent_name: {{ id }}-group
{{ id }}-http.{{ type }}.url: {{ args.url }}
{% if args.keyword %}
    {{ id }}-http.{{ type }}.keyword: {{ args.keyword }}
{% endif %}
{% if args.status_code %}
    {{ id }}-http.{{ type }}.status_code: {{ args.status_code }}
{% endif %}
{{ id }}-http-container.docker.name: {{ args.name }} (Container)
{{ id }}-http-container.docker.parent_name: {{ id }}-group

其用法如下:只是一个基本的 http 监控器

kuma.__web: '{ "name": "Example HTTP", "url": "https://example.com" }'

关键字监控器,具有自定义状态码

kuma.__web: '{ "name": "Example HTTP", "url": "https://example.com", "keyword": "Example Domain", "status_codes": ["200"] }'

静态监控器 📊

除了从 Docker 标签中读取监控器外,AutoKuma 还可以从文件中创建监控器。如果您希望 AutoKuma 管理与容器不直接相关的监控器,这可能很有用。

要创建静态监控器,只需在由 AUTOKUMA__STATIC_MONITORS 指定的目录中添加一个 .json 或 .toml 文件,请参考 此处示例

静态监控器的默认目录为

平台 示例
Linux $XDG_CONFIG_HOME/autokuma/static-monitors/ /home/alice/.config/autokuma/static-monitors/
macOS $HOME/Library/Application Support/autokuma/static-monitors/ /Users/Alice/Library/Application Support/autokuma/static-monitors/
Windows %LocalAppData%\\autokuma\\static-monitors\\ C:\\Users\\Alice\\AppData\\Local\\autokuma\\static-monitors\\

在静态监控器的情况下,id 由文件名(不含扩展名)确定。

依赖项

~39–59MB
~1M SLoC