mcpField
M
maintenant

maintenant

远程服务
docs.maintenant.dev云与基础设施5323 天前更新

关于 maintenant

maintenant 监控 Docker、Kubernetes、主机、端点、证书和定时任务,并提供告警与实时日志。内置 MCP 服务让 AI Agent 通过只读数据调查故障,不会操作容器。

主要功能

  1. 01自动发现 Docker 和 Kubernetes 工作负载
  2. 02跟踪资源用量、健康状态与日志
  3. 03检查端点、证书和定时任务
  4. 04检测镜像更新与安全风险
  5. 05路由并确认告警
  6. 06内置只读 MCP 服务

适用场景

  1. 01让 Agent 调查容器故障
  2. 02查看日志和活动告警
  3. 03监控端点与 TLS 到期时间
  4. 04跟踪定时任务截止时间

MCP 相关

内置 MCP 服务向 AI 客户端提供日志、告警历史、资源和事件处理工具。支持 stdio 与 Streamable HTTP,并为远程客户端提供 OAuth2。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://{maintenant_host}/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
ocighcr.io/kolapsis/maintenant:1.11.0

工具

详细介绍

maintenant,在一个容器中监控基础设施

maintenant

启动一个容器。你的技术栈就受到监控。
发生故障时,固定规则会及时发现,警报会推送给你,你的 AI Agent 则通过内置 MCP 服务进行调查。

Docker、Kubernetes、运行时间、TLS、cron 作业、实时日志、镜像更新、CVE:自动发现,并对每一项发出警报,
全部由一个 Go 二进制文件完成。刚启动时只需几十 MB 内存,在繁忙主机上运行数天后约需 100 MB。无需 PromQL,无需导出器,也不必构建仪表板。

试用在线演示 →
一个监控真实技术栈的 Pro 实例,只读访问。无需安装,也无需注册。

版本发布 Docker 许可证 星标数

在线演示  •  快速开始  •  为什么选择 maintenant  •  Agent  •  功能  •  文档  •  版本  •  定价


快速开始

# docker-compose.yml
services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"
    restart: unless-stopped

volumes:
  maintenant-data:
docker compose up -d

打开 **http://localhost:8080**。你的容器及其健康状态、重启循环、资源和日志都已显示出来,无需进行任何配置。

Docker 套接字访问会自动处理:入口点会读取已挂载套接字的组,并将其授权给非特权用户。Compose 和 Swarm 均适用(Swarm 中的 docker stack deploy 会静默忽略 group_add)。如果套接字所属组为 root,需要设置 DOCKER_GID=0。如果容器没有显示,请参阅故障排查。

Kubernetes

kubectl create namespace maintenant
kubectl apply -f deploy/kubernetes/

自动检测集群内 API,使用只读 RBAC、命名空间筛选,并将工作负载(Deployments、DaemonSets、StatefulSets)作为一等公民。Kubernetes 指南。

裸 Linux,无需 Docker(systemd,amd64 和 arm64,静态链接)

curl -fsSL https://install.maintenant.dev | sudo bash

无需任何容器运行时,即可监控端点、证书和心跳。容器监控会在检测到运行时后自动启用。有关固定版本、隔离网络安装和供应链验证,请参阅安装文档。

云端:使用一个 cloud-init 文件,即可在 Hetzner Cloud、DigitalOcean、Scaleway、OVHcloud 或 Vultr 上启动经过安全加固并运行 maintenant 的主机。


为什么选择 maintenant?

使用标准技术栈监控自己的基础设施,意味着要运行 Prometheus、Grafana、Alertmanager、node-exporter、cAdvisor、blackbox-exporter、证书导出器、Loki、Promtail、Trivy,以及某种镜像更新工具。十来个组件,各自都有配置、升级和仪表板,只为回答一个问题:我的技术栈运行正常吗?什么出了问题?

maintenant 用一个容器就能回答这个问题。

maintenant 内置功能你原本需要自行搭建的组件
容器状态、健康检查、重启循环cAdvisor + node-exporter + 你编写的告警规则
容器和主机级别的 CPU、内存、网络和磁盘指标cAdvisor + node-exporter + 你构建的 Grafana 仪表板
通过 Docker 标签声明的 HTTP / TCP 端点检查blackbox-exporter + 每个目标各自的配置文件
TLS 证书到期时间和证书链验证ssl_exporter
Cron 和心跳截止时间Pushgateway + 你编写的告警规则
实时容器日志,stdout/stderr 分流显示Dozzle,或 Loki + Promtail
镜像更新检测,支持感知 compose 的更新和回滚命令Diun 或 Watchtower
网络暴露审计:0.0.0.0 绑定、暴露的数据库端口、主机网络、特权容器没有标准工具
CVE 信息补充和容器级风险评分 (Personal)Trivy + 其导出器
将告警路由到 Discord、webhooks、电子邮件、Telegram、Slack 和 Teams,并支持升级处理 (Pro)Alertmanager
带有事件和订阅者的公开状态页Cachet、Uptime Kuma 或 SaaS 服务
汇总上述所有信息的实时仪表板Grafana + 由你构建和维护的仪表板

我还需要 Prometheus 吗? maintenant 监控你的基础设施。Prometheus 监控你的应用。这里没有 PromQL、没有自定义导出器,也没有需要设计的面板:maintenant 已经了解容器、证书、端点、cron 作业和 CVE,并会在它们出现时立即开始监控。如果你要发布业务指标并编写自己的查询,就继续用 Prometheus 来处理这些工作。两者回答的是不同的问题,很多人也会同时运行它们。

与通常会和它一同使用的工具相比:

maintenantUptime KumaPortainerDozzle
容器自动发现是否是是
MCP 服务,适配 Agent内置第三方独立部署否
实时容器日志是否是是
HTTP/TCP 端点检查是是否否
Cron/心跳监控是是否否
SSL 证书跟踪是是否否
CPU/内存/网络指标是否有限否
镜像更新检测是否是否
网络安全洞察是否否否
CVE 信息补充、风险评分Personal否否否
公开状态页是是否否
带路由功能的告警是是有限否
原生支持 Kubernetes是否是否
单一二进制文件,零依赖是Node.jsDocker APIDocker API
无需运行时即可运行是否否否

一个容器。一个仪表板。监控一切。


截图

仪表板
仪表板:运行时间、响应时间、资源、统一监控
统一告警
汇总所有来源的告警
安全态势
安全态势,包含 CVE 信息增强和风险评分(个人版)
更多截图
容器
容器自动发现
系统资源
各容器和主机的资源
端点
端点监控
心跳
心跳和 cron 监控
证书
TLS 证书跟踪
更新
更新情报
网络安全洞察
网络安全洞察
通过 MCP 使用的 AI 助手
通过 MCP 接入的 AI 助手
状态页,所有服务正常运行
状态页:所有服务均正常运行
状态页,服务降级
状态页:服务降级

Agent

maintenant 负责监控,AI Agent 负责调查。整个流程分为三个步骤:

  1. 检测。 固定规则判断某项服务是否宕机:连续失败、超过阈值、错过截止时间、重启循环。整个过程不涉及模型,因此不会凭空生成告警,一切正常时也不会产生费用。
  2. 推送。 告警通过 webhook 发出:开始时发送 alert.fired,恢复时发送 alert.resolved,并附上告警所属的主机(agent_id)以及返回该主机的链接。
  3. 调查。 Agent 收到告警后,会查询 maintenant 内置的 MCP 服务:容器日志、端点的检查历史、CPU 和内存,以及同一主机上的其他活动告警。你得到的是诊断结果,而不只是一盏红灯。
flowchart LR
    S[containers, endpoints,<br>certificates, cron jobs, hosts] --> M[maintenant<br>rules fire an alert]
    M -- webhook --> A[your agent<br>Claude Code, OpenCode, n8n]
    A -- MCP: logs, history,<br>active alerts --> M

使用 Claude Code。 一个小型接收器(仅使用 Python 标准库)运行在与 maintenant 同一台主机上。每条已触发的告警都会启动一个无头 Claude Code 会话,该会话只能调用 maintenant 的只读 MCP 工具,诊断结果会写入 reports/<alert-id>.md:

export RECEIVER_TOKEN=$(openssl rand -hex 32)
python3 examples/agent-webhook/receiver.py      # listens on 127.0.0.1:9099
# what the receiver runs for each alert
claude -p "maintenant just fired this alert: {...} Investigate it read-only." \
  --setting-sources project --mcp-config mcp.json --strict-mcp-config --tools "" \
  --allowedTools mcp__maintenant__list_alerts mcp__maintenant__get_container_logs \
                 mcp__maintenant__get_endpoint_history mcp__maintenant__get_resources

mcp.json 通过 docker exec -i maintenant /app/maintenant --mcp-stdio 经由 stdio 连接 maintenant,因此无需开放 MCP 端口:启动 maintenant 时设置 MAINTENANT_MCP_SOCKET=true,即可提供它转发到的本地套接字。将 webhook 通道指向接收器,并添加 Authorization: Bearer <token> 请求头,再使用触发器将告警路由到接收器。AI Agent 指南介绍了完整的设置流程。

使用 OpenCode 时,同一接收器会调用 opencode run,而不是 claude -p,并在 opencode.json 中将 maintenant 声明为本地 MCP 服务。使用 n8n 时,Webhook 触发器会将告警传递给 AI Agent 节点,该节点的 MCP Client 工具指向你实例的 /mcp 端点。

MCP 服务

内置的 Model Context Protocol 服务,提供 51 个工具。向 AI 助手询问当前发生了什么故障、查看容器日志、检查告警队列、确认告警或创建事件。支持 stdio 和 Streamable HTTP 传输;远程客户端(Claude 网页版、移动端和桌面应用)可通过 OAuth2 客户端 ID 和密钥进行连接。


功能

每个部分都链接到对应的完整文档。

容器监控

无需配置即可自动发现 Docker、Docker Swarm 和 Kubernetes。每个容器在启动时都会立即开始跟踪:状态变化、健康检查、重启循环,以及带有 stdout/stderr 分流的实时日志流。Compose 项目会自动分组。只读:maintenant 只进行监控,绝不会触碰你的容器。

多主机监控

一台中央服务器,其他主机上运行轻量级只读 Agent,它们之间通过持久、相互认证的 gRPC 流连接。无需共享数据库、消息队列或搭建 PKI:Agent 使用一次性令牌和本地生成的 Ed25519 密钥对注册,且每条数据流都经过质询-响应认证。你可以随时在 UI 中撤销 Agent。

# On each remote host, one command, generated for you in the UI
docker run -d --name maintenant-agent --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /proc:/host/proc:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  -v maintenant-agent-data:/var/lib/maintenant \
  ghcr.io/kolapsis/maintenant:latest \
  --mode=agent --server=grpcs://monitoring.example.com \
  --enrollment-token=mnt_enr_XXXXXXXXXXXXXXXX --label="prod-worker-01"

Agent 会检测本地运行时(Docker、Swarm 或 Kubernetes),并流式传输容器状态、端点、证书、主机 CPU/内存/磁盘信息;断开连接后会自动重连,并将断连期间收集的数据作为历史记录补传。每个实体都会标记所属主机,因此不同机器的数据不会混在一起。Personal:最多 20 台远程机器。Pro:不限数量。

更新情报

扫描 OCI 注册表:检查固定标签是否有更新版本;对于 latest 这类浮动标签,则比较容器当前运行的镜像摘要与该标签现在指向的摘要。无需盲目执行 docker pull,即可了解哪些镜像有更新。提供适用于 Compose、普通 Docker、Swarm 和 Kubernetes 的更新与回滚命令,并自动切换到正确的 Compose 项目目录。无需 Diun、Watchtower 或额外容器:此功能已集成在监控器中。

主机操作系统停止支持提醒

每台受监控的主机都会报告其发行版和版本;maintenant 会根据 Debian、Ubuntu、RHEL、Rocky、Alma、Alpine 和 SLES 的支持周期进行检查,并在免费安全支持结束前 30 天发送提醒,支持结束后还会再次提醒。日期数据随二进制文件一同提供,并会在网络条件允许时每天从 endoflife.date 更新。

端点监控

通过 Docker 标签声明 HTTP 和 TCP 检查,在容器启动时自动发现,也可手动添加。端点还可以从 Traefik 和 Caddy 标签派生(需选择启用)。提供响应时间、正常运行时间历史记录、90 天趋势图、故障和恢复阈值。

labels:
  maintenant.endpoint.http: "https://api:3000/health"
  maintenant.endpoint.interval: "15s"
  maintenant.endpoint.failure-threshold: "3"
心跳和 cron 监控

创建监控器并获取 URL,然后在任务中添加一条 curl 命令。maintenant 会跟踪任务的开始和结束时间、持续时长、退出代码,并在错过截止时间时发送提醒。出站心跳可让两个 maintenant 实例互相监控,避免监控器宕机而无人察觉。

curl -fsS -o /dev/null https://now.example.com/ping/{token}/$?
TLS 证书监控

自动从 HTTPS 端点发现证书,也可为任意域名创建独立监控器。提供完整证书链验证,并在证书到期前 30、14、7、3 和 1 天发送提醒,还可检查 OCSP 装订(Personal)。

资源指标

实时查看每个容器和主机的 CPU、内存、网络和磁盘 I/O;通过资源消耗排名视图快速排查问题,并为每个容器设置带防抖功能的阈值。历史数据保留时间:Community 为 7 天,Personal 为 30 天,Pro 为 90 天。

网络安全洞察

标记不应存在的配置:绑定到 0.0.0.0 的端口、暴露的数据库端口、主机网络模式、特权容器、类型为 NodePort 或 LoadBalancer 的 Kubernetes Service,以及通过这些 Service 暴露的数据库端口。Personal 还会通过检查 OCI 清单,将每个镜像映射到其软件生态系统,以补充 CVE 信息;提供每个容器的风险评分和统一的安全态势仪表板。

告警引擎

所有来源共用一条告警管线:容器重启循环、健康检查异常和容器停止、端点故障、心跳超时、证书即将到期或无效、CPU 和内存阈值超限、可用更新、Swarm 和 Kubernetes 健康状况、Agent 离线,以及主机操作系统停止支持。默认情况下,通知渠道处于静默状态,并通过触发器(严重级别、来源、范围)进行路由。告警可以确认。可为计划维护设置静默规则;每条通知最多尝试投递三次。

通知渠道:Discord 和 Webhook(Community)、电子邮件和 Telegram(Personal)、Slack 和 Microsoft Teams(Pro)。Pro 还提供最多五级的升级策略,依次通知值班人员、后备人员和负责人,并支持维护时段。

公开状态页

实时状态页会汇总所有监控器的严重级别,并通过 SSE 实时更新。Personal 提供事件时间线;Pro 还支持电子邮件订阅者(双重选择加入,通过你自己的 SMTP 服务器发送)、维护时段和品牌定制。


配置

所有配置都由 Docker 标签和少量环境变量驱动。无需维护 YAML。

  • 环境变量:绑定地址、数据库、基础 URL、PostgreSQL DSN、MCP、Kubernetes 命名空间、许可证密钥、遥测。
  • Docker 标签参考:端点、TLS、告警严重级别、重启阈值、更新跟踪、分组、忽略。
  • /api/v1/ 下的 REST API,以及 SSE 事件流。
完整堆栈示例
services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"

  api:
    image: myapp:latest
    labels:
      maintenant.group: "production"
      maintenant.endpoint.http: "http://api:3000/health"
      maintenant.endpoint.interval: "15s"
      maintenant.alert.severity: "critical"

  postgres:
    image: postgres:16
    labels:
      maintenant.endpoint.tcp: "postgres:5432"
      maintenant.alert.severity: "critical"

  redis:
    image: redis:7-alpine
    labels:
      maintenant.endpoint.tcp: "redis:6379"

volumes:
  maintenant-data:

安全模型

  • 按设计不内置身份验证。 与 Dozzle 和 Prometheus 一样,maintenant 位于反向代理和身份验证中间件(Traefik 或 Caddy、Authelia 或 Authentik)之后。/ping/{token} 和 /status/ 应保持公开。反向代理设置。
  • 全程只读。 Docker 套接字以 :ro 挂载,Kubernetes RBAC 为只读,Agent 也为只读。maintenant 从不启动、停止或修改容器。如果你不想挂载套接字,也可以使用套接字代理。
  • 经过加固的容器。 修正卷的所有权后,会降权至 nobody(uid 65534);根文件系统设为 read_only,并启用 no-new-privileges。
  • 匿名、可选择退出的遥测。 每小时发送一次快照:受监控对象数量、版本、存储引擎、版本和运行时数据(操作系统、架构、CPU 核心数、内存)。绝不发送主机名、IP、名称、URL 或密钥。设置 MAINTENANT_DISABLE_TELEMETRY=1 即可关闭遥测,不会启动后台 goroutine,也不会发送任何出站数据包。准确的负载和详细信息。

架构

  • 一个二进制文件,三种模式。 Go 后端、通过 embed.FS 嵌入的 Vue 3 前端,以及内置的 SQLite。同一个文件可运行 embedded(单主机,默认)、server(集中采集)和 agent(远程主机)。
  • 零依赖。 SQLite 是唯一的数据存储。无需 Redis、无需队列,也无需管理其他组件。集群运维人员可以使用已有的 PostgreSQL 为服务端提供支持;Agent 始终使用 SQLite。
  • 运行时可选。 无需 Docker 套接字或 Kubernetes API,端点、证书和心跳也能正常运行。运行时变为可访问后,容器监控会自动恢复。
  • 实时。 SSE 会将每次状态变化即时推送到浏览器和状态页面。
  • 内存占用低。 刚启动的实例只占用几十 MB;在繁忙主机上运行数天后,预计占用约 100 MB。可运行在 Raspberry Pi、€4 的 VPS 或 NAS 上。

完整介绍请参阅架构文档。


版本

Community 永久免费,每天都能运行生产基础设施:它是在单台主机上运行的完整产品,而非功能受限的试用版。Personal 一次性购买。Pro 则适合团队使用。

CommunityPersonalPro
价格免费,Apache-2.0一次性 €149,终身使用€29/月或 €290/年,14 天试用期
主机1最多 20 台远程机器不限
端点10不限不限
心跳5不限不限
证书5不限不限
资源历史7 天30 天90 天
告警渠道Discord、webhook+ 邮件、Telegram、高级筛选+ Slack、Teams、升级通知、维护窗口
安全网络洞察+ CVE 信息补充、风险评分、安全态势、OCSP同左
状态页3 个组件不限,含事件时间线+ 订阅者通知、品牌定制
用途任意你自己的基础设施+ 为他人运行、邮件支持

Personal 适用于一个人在自己拥有或为自己运行的基础设施上使用,也包括自由职业者,并附带一年更新服务(之后每增加一年需支付 €59;付费年度内发布的所有版本均永久授权)。Pro 额外允许你监控他人的基础设施。批量定价和定制协议:[email protected]。

付费版本使用相同的二进制文件,自托管方式也相同。密钥会向许可证服务验证,验证通过的签名响应会缓存:只有在 60 天内无法连接到服务时,实例才会回退到 Community,因此离线几周不会有任何影响。你的监控数据绝不会离开你的基础设施。

MAINTENANT_LICENSE_KEY=your-license-key   # Personal or Pro, restart, done

购买 Personal,一次性支付 €149 →  ·  开始 14 天 Pro 试用 →
全球支持 Stripe,欧盟支持 Mollie(SEPA、iDEAL、Bancontact)。提供 VAT 发票。可随时取消 Pro。


支持这个项目

maintenant 由一位位于法国波尔多的开发者独立打造。没有风投、没有广告,也没有出售退出。100% 的收入都用于全职开发。按影响力排序:

  1. 购买许可证。 如果基础设施属于你,请选 Personal;如果你为他人运行基础设施,请选 Pro。解锁功能并支持路线图开发。查看版本 →
  2. 赞助。 金额不限,可一次性赞助或按月赞助,赞助者会列在下方。GitHub Sponsors →
  3. 帮忙宣传。 为仓库点星,在 HN、Lobsters、Reddit 或 LinkedIn 上分享。提高知名度是独立项目的命脉。
  4. 告诉我你如何使用它。 只需两分钟,由开发者亲自阅读;未经你许可,不会引用你的反馈。提供反馈 →
支持者

每位 Personal 所有者、Pro 订阅者和 GitHub 赞助者,都在帮助本项目保持独立。感谢你们。

GitHub 赞助者

想在这里展示贵公司的 Logo 吗?成为企业赞助者:为贵公司提供曝光,也为项目提供发展空间。


贡献

欢迎贡献代码。较大的改动请先提交 issue;小修复、错别字和文档改动,直接提交 PR 即可。


许可证

版权所有 2025-2026 Benjamin Touchard / kOlapsis,法国波尔多。

核心部分采用 Apache License 2.0 授权。Personal 和 Pro 密钥解锁的代码(位于 internal/commercial/ 和 frontend/src/commercial/ 下)以源代码可用的方式遵循 Maintenant Commercial Source License 授权:可免费阅读和贡献,但生产环境使用需要匹配的许可证密钥。请参阅 NOTICE 和 COMMERCIAL-LICENSE.md。


France 2030
荣获 Hyper Open X 项目征集奖项。本项目由法国政府通过 France 2030 计划资助。
荣获 Hyper Open X 项目征集奖项,由法国政府通过 France 2030 计划资助。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。