日志记录 API

使用日志记录 API

日志记录 API 揭示节点、组件和容器(任务)日志。

日志记录 API 由 [DC/OS 日志组件] 支持(/1.12/overview/architecture/components/#dcos-log),后者在群集中的所有节点上运行。有关使用日志记录 API 的更多信息,请参阅 日志记录。关于使用示例,请参阅 日志记录 API 示例

兼容性

对于 DC/OS 1.11 及更新版本,日志记录 API 已有重大更新。

在 1.11 之前的 DC/OS 版本中,任务日志可通过 文件 API获得。现在,您可以利用组件和任务日志的综合 API。

在 1.11 之前的 DC/OS 版本中,节点和组件日志由 journald 管理。不过,由于 journald 性能问题,Mesos 任务 journald 日志槽已被禁用。因此,只能通过 Mesos 任务沙盒文件 API 来访问旧版本的容器日志文件。

以下代码可能有用:

  1. FRAMEWORK_NAME="marathon"
  2. APP_ID="nginx"
  3. # get the mesos task state json
  4. MESOS_STATE="$(curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" ${DCOS_URL}/mesos/state)"
  5. TASK_STATE="$(echo "${MESOS_STATE}" | jq ".frameworks[] | select(.name == \"${FRAMEWORK_NAME}\") | .tasks[] | select(.name == \"${APP_ID}\")")"
  6. # extract values from the task json
  7. AGENT_ID="$(echo "${TASK_STATE}" | jq -r '.slave_id')"
  8. TASK_ID="$(echo "${TASK_STATE}" | jq -r '.id')"
  9. FRAMEWORK_ID="$(echo "${TASK_STATE}" | jq -r '.framework_id')"
  10. EXECUTOR_ID="$(echo "${TASK_STATE}" | jq -r '.executor_id')"
  11. CONTAINER_ID="$(echo "${TASK_STATE}" | jq -r '.statuses[0].container_status.container_id.value')"
  12. # default to container ID when executor ID is empty
  13. EXECUTOR_ID="${EXECUTOR_ID:-${TASK_ID}}"
  14. # Using Mesos API, agent/files endpoint
  15. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/agent/${AGENT_ID}/files/read?path=/var/lib/mesos/slave/slaves/${AGENT_ID}/frameworks/${FRAMEWORK_ID}/executors/${EXECUTOR_ID}/runs/${CONTAINER_ID}/stdout&offset=0&length=50000"

路由

访问日志记录 API 是通过每个节点上使用以下路由的 Admin Router 代理的:

  1. /system/v1/logs/

代理节点的日志记录 API 访问是根据 {agent_id},通过管理节点代理到适当代理节点的:

  1. /system/v1/agent/{agent_id}/

要确定群集的地址,请参阅 群集访问

发现端点

服务于任务日志的管理节点路由也被称为*‘发现端点’*。用户对发现端点进行 GET 请求时,用户被重定向到具有所需端点的代理节点。

请求中使用的参数来自 Mesos state.json,被称为“任务元数据”。

认证

所有日志记录 API 路由均需要认证才能使用。要验证 API 请求,请参阅 获取认证令牌传递认证令牌

日志记录 API 还需要通过以下权限授权:

路径权限
/system/v1/logs/v2/dcos:adminrouter:ops:system-logs
/system/v1/agent/{agent_id}/logs/v2/dcos:adminrouter:system:agent

用户也可以通过 dcos:superuser 权限来到达所有路由。要为您的账户分配权限,请参阅 权限参考

格式

API 请求标题可以是以下任何一项:

  • 文本格式的 text/plaintext/html*/* 请求日志,以 \n 结束。
  • JSON 格式的 application/json 请求日志。
  • 服务器发送事件格式的 text/event-stream 请求日志。

DC/OS 日志记录遵循 服务器发送事件规范。如果客户端指定了 SSE 规范中所定义的请求标题 Last-Event-ID(最后一个事件的 ID),则它支持从特定光标位置读取日志条目。SSE 格式的每个日志条目都包含带有令牌 ID 的 ID:这可以让客户端知道当前日志条目,让您能够在它被中断时恢复日志消耗。

资源

上述路由 均提供以下资源:

日志记录 API - 图1