日志记录 API 示例

日志记录 API 示例

前提条件:

  • Curl

  • DC/OS

  • 从 DC/OS CLI 提取 和 DCOS_AUTH_TOKEN

节点日志

  1. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/range/?skip_prev=100"

组件日志

从单个组件服务获取最后 100 个日志条目:

领导 Mesos 管理节点:

  1. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/leader/mesos/logs/v1/range/?skip_prev=100&filter=_SYSTEMD_UNIT:dcos-mesos-master.service"

领导 Marathon:

  1. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/leader/marathon/logs/v1/range/?skip_prev=100&filter=_SYSTEMD_UNIT:dcos-mesos-master.service"

代理 DNS 转发器 (Spartan):

容器日志

重要信息:以下示例需要进行 journald 任务日志记录,它默认为 [禁用](/mesosphere/dcos/cn/2.1/monitoring/logging/logging-reference/#compatibility)。

从单个组件容器获取最后 100 个日志条目:

  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. CONTAINER_ID="$(echo "${TASK_STATE}" | jq -r '.statuses[0].container_status.container_id.value')"
  11. # default to container ID when executor ID is empty
  12. EXECUTOR_ID="${EXECUTOR_ID:-${TASK_ID}}"
  13. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/agent/${AGENT_ID}/logs/v1/range/framework/${FRAMEWORK_ID}/executor/${EXECUTOR_ID}/container/${CONTAINER_ID}?skip_prev=100"

结尾

获取最后 10 个日记账条目并追踪新事件:

  1. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/stream/?skip_prev=10"

范围

  1. curl -k -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/range/?skip_next=100&limit=10"

纯文本

从日志开头跳过 200 个条目,并以纯文本返回下一个条目:

JSON

从日志开头跳过 200 个条目,并以 JSON 返回下一个条目:

  1. curl -k -H "Accept: application/json" -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/range/?skip_next=200&limit=1"

事件流

从日志开头跳过 200 个条目,并返回作为事件流的下一个条目:

  1. curl -k -H "Accept: text/event-stream" -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/range/?skip_next=200&limit=1"

事件流游标

获取特定游标后的所有日志条目并流式传输新条目:

  1. # Get the 10th line in json and parse its cursor
  2. CURSOR="$(curl -k -H "Accept: application/json" -H "Authorization: token=${DCOS_AUTH_TOKEN}" "${DCOS_URL}/system/v1/logs/v1/range/?skip_next=9&limit=1" | jq -r ".cursor")"
  3. # Follow the stream in plain text starting at the 11th line using the cursor

游标必须为 URL 编码。

范围游标

获取 1,000 个日志条目,每次 100 个:

每次调用都使用上次调用中最后一个条目的光标。游标必须为 URL 编码。