使用 Splunk 筛选日志

使用 Splunk 筛选日志的系统路径

DC/OS 任务日志的文件系统路径包含代理 ID、框架 ID 和执行器 ID 等信息。您可以使用此信息来筛选特定任务、应用程序或代理的日志输出。

先决条件

  • [聚合 DC/OS 日志的 Splunk 安装][1]

配置

您可以通过使用 Splunk [Web 界面][2] 或编辑 [props.conf 文件][3] 来配置 Splunk。

Splunk Web 界面

  1. 导航至 Settings -> Fields -> Field Extractions -> New
  2. 使用以下信息填写表格:
  • 目标应用:search

  • 名称:dcos_task(或提取的任何有意义的唯一性名称)

  • 适用于名为 /var/lib/mesos/slave/...source

  • 类型:Inline

  • 提取/转换:

    1. /var/lib/mesos/slave/slaves/(? <agent>[^/]+)/frameworks/(? <framework>[^/]+)/executors/(? <executor>[^/]+)/runs/(? <run>[^/]+)/.* in source
  1. 点击Save

  2. Field Extractions视图中,找到刚创建的提取内容并适当地设置权限。agentframeworkexecutorrun 字段现在应该可用于搜索查询,显示在与 Mesos 任务日志事件相关的字段中。

props.conf

  1. 添加以下条目至 props.conf(请参阅 [Splunk 文档][4] 了解详情):

    1. [source::/var/lib/mesos/slave/...]

EXTRACT = /var/lib/mesos/slave/slaves/(? [^/]+)/frameworks/(? [^/]+)/executors/(? [^/]+)/runs/(? [^/]+)/.* in source

  1. 2. Splunk Web 界面运行以下搜索,以确保更改内容生效:
  1. extract reload=true
  1. `agent``framework``executor` `run` 字段现在应该可用于搜索查询,显示在与 Mesos 任务日志事件相关的字段中。
  2. # <a name="usage"></a>使用示例
  3. 1. Splunk Web 界面,将 `framework=*` 输入 **Search** 字段。这将显示 `framework` 字段已定义的所有事件:
  4. ![Splunk 框架已存在](/mesosphere/dcos/cn/1.11/img/splunk-framework-exists.png)
  5. 1. Splunk 事件屏幕
  6. 1. 点击其中一个事件旁边的披露三角形可查看详细信息。这将显示从任务日志文件路径提取的所有字段:
  7. ![Splunk 字段](/mesosphere/dcos/cn/1.11/img/splunk-fields.png)
  8. 2. 任务日志文件路径中的字段
  9. 1. 搜索所有提到上述屏幕截图中所示事件框架 ID 的事件,但不要包含选中的 `framework` 字段。这将仅显示非任务结果:
  10. ![Splunk 框架搜索](/mesosphere/dcos/cn/1.11/img/splunk-framework-search.png)
  11. 3. 搜索结果
  12. # <a name="templates"></a>模板示例
  13. 以下是用于使用 Splunk 聚合 DC/OS 日志的查询模板示例。使用集群中的实际值替换模板参数 `$executor1``$framework2`,以及任何其他内容。
  14. <p class=="message--important"><strong>重要信息:</strong>请勿更改这些示例中的引号,否则查询将不起作用。如果您创建自定义查询,请注意布局引号。</p>
  15. * 与特定执行器相关的日志 `$executor1`,包括从该执行器运行的任务的日志:

“$executor1”

  1. * 与特定执行器有关的非任务日志 `$executor1`

“$executor1” AND NOT executor=$executor1

  1. * 框架的日志(包括任务日志)`$framework1`,如果 `$executor1` `$executor2` 是该框架的执行器:

“$framework1” OR “$executor1” OR “$executor2”

  1. * 框架的非任务日志`$framework1`,如果 `$executor1` `$executor2` 是该框架的执行器:
  1. ("$framework1" OR "$executor1" OR "$executor2") AND NOT (framework=$framework1 OR executor=$executor1 OR executor=$executor2)
  1. * 特定代理主机上 `$agent_host1` 框架的日志 `$framework1`
  1. host=$agent_host1 AND ("$framework1" OR "$executor1" OR "$executor2")
  1. * 带主机 `$agent_host1` 的特定代理 `$agent1` 上框架 `$framework1` 的非任务日志:
  1. host=$agent_host1 AND ("$framework1" OR "$executor1" OR "$executor2") AND NOT agent=$agent
  1. [1]: ../splunk/
  2. [2]: #splunkui
  3. [3]: #propsconf
  4. [4]: http://docs.splunk.com/Documentation/Splunk/latest/admin/Propsconf