am操作观察员
Archivematica操作的Go服务有两个主要模块:
- 正在运行的传输故障排除(接近实时)
- 面向客户的KPI月度报告
PoC状态(重要)
该存储库目前是一个概念验证(PoC):它演示了可能的功能和工作流程,但它不是一个生产强化部署。
当前假设/限制:
- 专为一体化Archivematica服务器布局而设计。
- 未针对多管道部署进行验证。
- 未针对分离/远程存储服务服务器拓扑进行验证。
- 在这个PoC阶段,跨主机网络/身份验证强化和规模调优不在范围内。
- 无身份验证/授权(无登录、无RBAC、无租户隔离)。
- 还没有API安全控制(应用程序中没有TLS终止,没有API令牌,没有速率限制)。
- 没有用于生成报告的后台作业队列/调度程序。
- 没有警报/通知策略集成。
- 应用程序拥有的SQLite数据没有迁移/版本控制工作流。
- 测试覆盖范围有限,主要集中在核心处理器上;目前还没有完整的端到端测试套件。
- 未来的工作:Keycloke/OIDC SSO集成(登录、会话处理、受保护路由和角色映射)。
安装软件包(DEB/RPM)
1) 安装软件包
Debian/Ubuntu:
sudo dpkg -i am-ops-observer__amd64.debRHEL/Rocky/Alma/Fedora:
sudo rpm -Uvh am-ops-observer-.x86_64.rpm1.1)升级包
Debian/Ubuntu:
sudo dpkg -i am-ops-observer__amd64.debRHEL/Rocky/Alma/Fedora:
sudo rpm -Uvh am-ops-observer-.x86_64.rpm1.2)卸载软件包
Debian/Ubuntu:
sudo dpkg -r am-ops-observerRHEL/Rocky/Alma/Fedora:
sudo rpm -e am-ops-observer2) 配置文件
编辑引导文件:
sudo editor /etc/default/am-ops-observer编辑主非机密配置:
sudo editor /etc/am-ops-observer/config.env编辑机密:
sudo editor /etc/am-ops-observer/secrets.env
sudo chmod 600 /etc/am-ops-observer/secrets.env3) 启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now am-ops-observer
sudo systemctl status am-ops-observer4) 验证
curl -s http://127.0.0.1:8080/health | jq
curl -s http://127.0.0.1:8080/ready | jq
curl -s http://127.0.0.1:8080/metrics | head -n 40配置快速参考(打包)
打包部署布局:
- Bootstrap文件:
/etc/default/am-ops-observer - 主要配置:
/etc/am-ops-observer/config.env - 机密文件:
/etc/am-ops-observer/secrets.env
启动时配置加载顺序:
- Bootstrap默认值来自
./am-ops-observer.env和/etc/default/am-ops-observer - 来自的主要非秘密配置
APP_CONFIG_FILE(如果设置),否则/etc/am-ops-observer/config.env - 秘密来自
APP_SECRETS_FILE(如果已设置),否则为systemd凭据目录(%d/app-secrets),否则/etc/am-ops-observer/secrets.env - 实际过程环境变量(最高优先级)
配置(所有选项)
必需选项与可选选项
传说:
Required:必须为预期行为明确设置。Conditional:仅在启用功能时才需要。Optional:具有安全默认值。
引导和文件路径选项
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_CONFIG_FILE | 可选 | /etc/am-ops-observer/config.env | 主非机密环境变量文件的路径。 |
APP_SECRETS_FILE | 可选 | 来自systemd凭据的自动;后备方案 /etc/am-ops-observer/secrets.env | 显式机密环境文件路径。 |
APP_SECRETS_CREDENTIAL_NAME | 可选 | app-secrets | 凭据文件名 CREDENTIALS_DIRECTORY. |
HTTP服务选项
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_LISTEN_ADDR | 可选 | :8080 | HTTP绑定地址。 |
APP_READ_TIMEOUT_SEC | 可选 | 10 | HTTP读取超时。 |
APP_WRITE_TIMEOUT_SEC | 可选 | 20 | HTTP写入超时。 |
APP_SHUTDOWN_TIMEOUT_SEC | 可选 | 10 | 优雅的关机超时。 |
APP_DEFAULT_RUNNING_LIMIT | 可选 | 50 | 运行视图的默认列表限制。 |
APP_DEFAULT_CUSTOMER_ID | 可选 | default | 报告中的默认客户id。 |
MCP数据库选项(只读)
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_DB_ENABLED | 可选 | false | 启用MCP支持的端点。 |
APP_DB_HOST | 有条件的 | 127.0.0.1 | 需要时 APP_DB_ENABLED=true (默认适用于多功能一体机)。 |
APP_DB_PORT | 有条件的 | 62001 | 需要时 APP_DB_ENABLED=true. |
APP_DB_USER | 有条件的 | archivematica | 需要时 APP_DB_ENABLED=true. |
APP_DB_PASSWORD | 有条件的 | demo | 需要时 APP_DB_ENABLED=true;放在机密文件中。 |
APP_DB_NAME | 有条件的 | MCP | 需要时 APP_DB_ENABLED=true. |
APP_DB_CONN_TIMEOUT_SEC | 可选 | 5 | MCP连接超时。 |
APP_DB_QUERY_TIMEOUT_SEC | 可选 | 10 | MCP查询超时。 |
APP_RUNNING_STUCK_MINUTES | 可选 | 30 | UI中的运行阈值停滞。 |
应用SQLite选项
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_CUSTOMER_MAP_SQLITE_PATH | 可选 | 空 | 设置时启用应用程序拥有的SQLite持久性(报告模板/映射),例如。 /var/lib/am-ops-observer/customer-mappings.db. |
存储服务数据库选项(只读)
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_SS_DB_ENABLED | 可选 | false | 启用SS包/位置丰富功能。 |
APP_SS_DB_HOST | 有条件的 | 127.0.0.1 | 需要时 APP_SS_DB_ENABLED=true. |
APP_SS_DB_PORT | 有条件的 | 62001 | 需要时 APP_SS_DB_ENABLED=true. |
APP_SS_DB_USER | 有条件的 | archivematica | 需要时 APP_SS_DB_ENABLED=true. |
APP_SS_DB_PASSWORD | 有条件的 | demo | 需要时 APP_SS_DB_ENABLED=true;放在机密文件中。 |
APP_SS_DB_NAME | 有条件的 | SS | 需要时 APP_SS_DB_ENABLED=true. |
APP_SS_DB_CONN_TIMEOUT_SEC | 可选 | 5 | SS DB连接超时。 |
APP_SS_DB_QUERY_TIMEOUT_SEC | 可选 | 10 | SS数据库查询超时。 |
普罗米修斯选项
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_PROM_ENABLED | 可选 | false | 启用普罗米修斯目标抓取。 |
APP_PROM_TARGETS | 有条件的 | http://127.0.0.1:7999/metrics | 逗号分隔的目标URL;在实践中,当 APP_PROM_ENABLED=true. |
APP_PROM_MATCH_PREFIX | 可选 | archivematica_ | 用于筛选的度量前缀 |
APP_PROM_SCRAPE_TIMEOUT_SEC | 可选 | 5 | 每目标抓取超时。 |
APP_PROM_SCRAPE_INTERVAL_SEC | 可选 | 15 | 内存历史记录的采样间隔。 |
APP_PROM_HISTORY_MAX_POINTS | 可选 | 720 | 最大保留图表点数。 |
Elasticsearch选项(只读)
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_ES_ENABLED | 可选 | false | 启用AIP查找和ES支持的详细信息。 |
APP_ES_ENDPOINT | 有条件的 | http://127.0.0.1:62002 | 需要时 APP_ES_ENABLED=true. |
APP_ES_TIMEOUT_SEC | 可选 | 5 | ES HTTP超时。 |
APP_ES_LOOKUP_LIMIT | 可选 | 5 | 传输查找的最大ES UUID候选。 |
APP_ES_AIP_INDEX | 可选 | aipfiles | 用于AIP数据的ES指数。 |
APP_ES_AIP_PAGE_SIZE | 可选 | 500 | AIP列表查询页面大小。 |
AIP风险阈值选项
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
APP_RISK_UNKNOWN_HOT_RATE | 可选 | 0.01 | 未知值比率的热阈值。 |
APP_RISK_UNKNOWN_HOT_ABS | 可选 | 5 | 未知值绝对计数的热阈值。 |
APP_RISK_MISSING_IDS_HOT_RATE | 可选 | 0.10 | 缺失标识符比率的热阈值。 |
APP_RISK_MISSING_IDS_HOT_ABS | 可选 | 20 | 缺失标识符绝对计数的热阈值。 |
APP_RISK_MISSING_CREATED_HOT_RATE | 可选 | 0.10 | 缺少创建日期比率的热阈值。 |
APP_RISK_MISSING_CREATED_HOT_ABS | 可选 | 20 | 缺少创建日期绝对计数的热阈值。 |
APP_RISK_EXT_MISMATCH_HOT_RATE | 可选 | 0.02 | 扩展不匹配率的热阈值。 |
APP_RISK_EXT_MISMATCH_HOT_ABS | 可选 | 10 | 扩展不匹配绝对计数的热阈值。 |
APP_RISK_DUP_FILES_HOT_RATE | 可选 | 0.20 | 重复文件比率的热阈值。 |
APP_RISK_DUP_FILES_HOT_ABS | 可选 | 50 | 重复文件绝对计数的热阈值。 |
APP_RISK_DUP_GROUPS_HOT_ABS | 可选 | 20 | 重复组绝对计数的热阈值。 |
APP_RISK_INDEX_LAG_P95_HOT_SEC | 可选 | 1800 | p95索引延迟的热阈值(秒)。 |
APP_RISK_MIN_DIVERSITY_RATIO | 可选 | 0.02 | 可接受的最小格式分集比。 |
APP_RISK_TINY_FILES_MAX | 可选 | 20 | 警告前的最大小文件数。 |
APP_RISK_MIN_UNIQUE_FORMATS | 可选 | 2 | 预期的最小唯一格式。 |
APP_RISK_MIN_UNIQUE_FORMATS_TINY | 可选 | 1 | 微小AIP的最小唯一格式。 |
范围
该项目将AM/SS/MySQL/Elasticsearch(以及可选的Prometheus)的传输见解集中到一个API+UI中。
重要模式:
- 对Archivematica系统(MCP MySQL、存储服务数据库、Elasticsearch)只读。
- 不写入MCP MySQL。
- 不写入存储服务数据库。
- 没有对Elasticsearch的写入。
- 应用程序拥有的持久性(报告模板和客户映射)可以存储在本地SQLite中。
故障排除模块
- 运行传输列表,包括阶段、已用时间和卡住指示器
- 传输时间线和错误钻取
- 源连接健康状况(AM、SS、MySQL、ES、Prometheus)
报告模块
- 每月转账总额(成功/失败)
- 持续时间关键绩效指标(平均值/p50/p95)
- 文件总计(总计/原始/标准化)
- 可配置的临时传输报告(过滤器+列+CSV导出)
- 在SQLite应用中保存报告模板
当前状态
主要终点:
GET /healthGET /readyGET /metrics(此应用程序的普罗米修斯展览)GET /api/v1/metrics/app(UI使用的轻量级应用指标摘要)GET /api/v1/transfers/running?limit=50GET /api/v1/sips/running?limit=50GET /api/v1/transfers/completed?limit=50GET /api/v1/transfers/{transfer_uuid}/summaryGET /api/v1/transfers/{transfer_uuid}/details?limit=100GET /api/v1/transfers/{transfer_uuid}/timeline?limit=200GET /api/v1/transfers/{transfer_uuid}/errors?limit=100GET /api/v1/troubleshooting/stalled?limit=50GET /api/v1/troubleshooting/hotspots?unit=transfer|sip&hours=24&limit=20GET /api/v1/troubleshooting/failure-counts?hours=24GET /api/v1/transfers/failed?hours=24&limit=30GET /api/v1/troubleshooting/failure-signatures?hours=24&limit=30GET /api/v1/reports/monthly?customer_id=acme&month=2026-02GET /api/v1/charts/transfer-durations?customer_id=acme&month=2026-02POST /api/v1/reports/query(可配置的即席报告运行)GET /api/v1/reports/query/optionsGET /api/v1/reports/templatesPOST /api/v1/reports/templatesGET /api/v1/reports/templates/{id}DELETE /api/v1/reports/templates/{id}GET /api/v1/reports/customers?limit=100GET /api/v1/reports/customer-mappings/{customer_id}GET /api/v1/metrics/prometheus/live?match=archivematica_GET /api/v1/charts/prometheus?target=&metric=&minutes=60GET /api/v1/status/servicesGET /api/v1/status/customer-mappingGET /api/v1/aips?limit=60&cursor=GET /api/v1/aips/{aip_uuid}/statsGET /api/v1/aips/{aip_uuid}/storage-service
当前行为:
- 在以下情况下,MySQL支持故障排除端点
APP_DB_ENABLED=true. - 月度报告端点由MySQL支持,返回真实的KPI+每日时间序列。
- 客户映射端点是只读的。SQLite映射后端在以下情况下使用
APP_CUSTOMER_MAP_SQLITE_PATH已设置。 - 当以下情况发生时,报告模板将持久化在应用程序SQLite中
APP_CUSTOMER_MAP_SQLITE_PATH已设置。 - UI包括概述、失败传输、服务状态、AIP和可配置报告选项卡。
- 如果禁用DB,则返回DB支持的端点
503带有明确的信息。
月报过滤注意事项
month格式:YYYY-MM- 特殊值
all/default/空禁用客户筛选 - 首选过滤模式:SQLite客户映射(
APP_CUSTOMER_MAP_SQLITE_PATH) - 回退模式(如果未配置映射后端):
Transfers.sourceOfAcquisition = customer_id - API在中返回活动模式
meta.customer_filter_mode
指标
/metrics导出Prometheus格式的应用程序指标。- 包括HTTP请求计数和持续时间、正在进行的请求、数据库查询持续时间和连接器/操作的错误计数器、外部探测持续时间和错误计数器、报告运行计数/持续时间和运行时指标(正常运行时间、goroutines、内存、GC、CPU、进程IO)。
/api/v1/metrics/app提供了一个紧凑的JSON摘要,供“服务”选项卡使用(最慢的HTTP端点、最慢的DB操作、聚合错误计数器)。
在本地运行(开发)
需求
- 转到1.21+
开始
go run ./cmd/api测试
go test ./...尝试端点
curl -s http://localhost:8080/health | jq
curl -s http://localhost:8080/metrics | head -n 40
curl -s http://localhost:8080/api/v1/metrics/app | jq架构(v1)
cmd/api:应用程序入口点internal/config:运行时配置(环境驱动)internal/http:HTTP服务器和处理程序internal/connectors/mysql:用于故障排除/报告查询的MySQL连接器internal/realtime(下一篇):业务逻辑层故障排查internal/reporting(下一篇):专用报表聚合层
包装和发布
此项目包括与以下内容相同的发布结构 csp-web-checker-golang:
.github/workflows/tests.ymlCI测试.github/workflows/release.yml对于经过semver验证的版本.github/actions/validate-semver/action.yml共享semver验证操作.goreleaser.yml用于二进制+tar.gz+DEB/RPM构建packaging/nfpm/*.sh包生命周期脚本packaging/default/am-ops-observer最小/etc/default独自创立packaging/default/am-ops-observer-config.env主非秘密配置文件packaging/default/am-ops-observer-secrets.env机密模板文件systemd/am-ops-observer.service系统单位
许可证
LICENSE:GNU Affero通用公共许可证v3(AGPL-3.0)
下一个里程碑
- 添加auth/RBAC和用户范围的报告视图。
- 添加导出端点(CSV/PDF),包括SS包/位置快照。
- 为繁重的月度报告聚合添加缓存。
