文章参考:Elasticsearch | Grafana Labs
Grafana 附带对 Elasticsearch 的高级支持。 您可以执行多种类型的简单或复杂的 Elasticsearch 查询来可视化存储在 Elasticsearch 中的日志或指标。 您还可以使用存储在 Elasticsearch 中的日志事件来注释您的图表。
添加数据源
1. 单击顶部标题中的 Grafana 图标打开侧边菜单。
2. 在 Dashboards 链接下的侧边菜单中,您应该找到一个名为 Data Sources 的链接。
3. 单击顶部标题中的 + 添加数据源按钮。
4. 从类型下拉列表中选择 Elasticsearch。
注意:如果您在侧边菜单中没有看到数据源链接,则意味着您的当前用户没有当前组织的管理员角色。
grafana服务端访问ES模式(推荐此模式。grafana浏览器直接访问ES模式已经过时)
grafana服务端访问ES模式,所有请求都将从浏览器发送到 Grafana 后端/服务器,后者又会将请求转发到数据源,从而规避可能的跨域资源共享 (CORS) 要求。 如果您选择此访问模式,则需要可以从 grafana 后端/服务器访问该 URL。
索引设置
您可以在此处指定时间字段的默认值并指定您的 Elasticsearch 索引的名称。 您可以为索引名称或通配符使用时间模式。
Elasticsearch版本
从版本选择下拉列表中选择 Elasticsearch 数据源的版本。 不同版本的查询编辑器中提供了不同的查询组合和功能。 可用的 Elasticsearch 版本有 2.x、5.x、5.6+、6.0+、7.0+、7.7+ 和 7.10+。 选择与您的数据源版本最匹配的选项。
Grafana 假设您在指定范围内运行可能的最低版本。 这可确保未来 Elasticsearch 版本中的新功能或重大更改不会影响您的配置。
例如,假设您正在运行 Elasticsearch 7.6.1 并且您选择了 7.0+。 如果新功能可用于 Elasticsearch 7.5.0 或更新版本,则 7.5+ 选项将可用。 但是,除非您在设置中明确选择新的 7.5+ 选项,否则您的配置不会受到影响。
最小时间间隔
按时间间隔自动分组的下限。 建议设置为写入频率,例如如果您的数据每分钟写入一次,则为1m。(me:也就是图中一个点落在x轴的粒度)
也可以在数据源选项下的仪表板面板中覆盖/配置此选项。 请务必注意,此值需要格式化为数字后跟有效时间标识符,例如 1m(1 分钟)或 30s(30 秒)。 支持以下时间标识符:
Identifier | Description |
---|---|
y | year |
M | month |
w | week |
d | day |
h | hour |
m | minute |
s | second |
ms | millisecond |
X-Pack enabled
启用 X-Pack 特定功能和选项,为查询编辑器提供额外的聚合,例如Rate和Top Metrics。
包括冻结索引
当 X-Pack enabled 处于活动状态且配置的 Elasticsearch 版本高于 6.6.0 时,您可以配置 Grafana 在执行搜索请求时不忽略冻结索引。
日志
有两个参数,消息字段名称和级别字段名称,可以选择从数据源设置页面进行配置,以确定在探索中可视化日志时哪些字段将用于日志消息和日志级别。
例如,如果您使用 Filebeat 的默认设置将日志传送到 Elasticsearch,则以下配置应该有效:
消息字段名称:message
级别字段名称:fields.level
数据链接
数据链接从指定字段创建链接,可在浏览器的日志视图中访问该链接。
每个数据链路配置包括:
字段 - 数据链接使用的字段名称。
URL/query - 如果链接是外部链接,则输入完整的链接 URL。 如果链接是内部链接,则此输入用作对目标数据源的查询。 在这两种情况下,您都可以使用 ${__value.raw } 宏从字段中插入值。
URL 标签 -(可选)为链接设置自定义显示标签。 链接标签默认为链接的内部数据源的完整外部 URL 或名称,并被此设置覆盖。
内部链接 - 选择链接是内部链接还是外部链接。 在内部链接的情况下,数据源选择器允许您选择目标数据源。 仅支持跟踪数据源。
指标查询编辑器
Elasticsearch 查询编辑器允许您选择多个指标并按多个术语或过滤器分组。 使用右侧的加号和减号图标添加/删除指标或分组依据子句。 某些度量和分组依据子句具有选项,单击选项文本可展开行以查看和编辑度量或分组依据选项。
系列命名和别名模式
您可以通过别名输入字段控制时间序列的名称。
Pattern | Description |
---|---|
{{term fieldname}} | replaced with value of a term group by |
{{metric}} | replaced with metric name (ex. Average, Min, Max) |
{{field}} | replaced with the metric field name |
管道指标
一些度量聚合称为流水线聚合,例如,移动平均和导数。 Elasticsearch 管道指标需要基于另一个指标。 使用指标旁边的眼睛图标隐藏指标,使其不显示在图表中。 这对于仅在查询中用于管道指标的指标很有用。
模板制作
您可以在指标查询中使用变量代替诸如服务器、应用程序和传感器名称之类的硬编码内容。 变量显示为仪表板顶部的下拉选择框。 这些下拉菜单可以轻松更改仪表板中显示的数据。
查看模板文档以了解模板功能和不同类型的模板变量。
查询变量
Elasticsearch 数据源支持两种类型的查询,您可以在查询变量的查询字段中使用。 查询是使用自定义 JSON 字符串编写的。
Query | Description |
---|---|
{"find": "fields", "type": "keyword"} | Returns a list of field names with the index type keyword . |
{"find": "terms", "field": "@hostname", "size": 1000} | Returns a list of values for a field using term aggregation. Query will use current dashboard time range as time range for query. |
{"find": "terms", "field": "@hostname", "query": '<lucene query>'} | Returns a list of values for a field using term aggregation and a specified lucene query filter. Query will use current dashboard time range as time range for query. |
术语查询的默认大小限制为 500。 在查询中设置 size 属性以设置自定义限制。 您可以在查询中使用其他变量。 名为 $host 的变量的示例查询定义。
{"find": "terms", "field": "@hostname", "query": "@source:$source"}
在上面的例子中,我们在查询定义中使用了另一个名为 $source 的变量。 每当您通过下拉列表更改 $source 变量的当前值时,它都会触发 $host 变量的更新,因此它现在只包含在这种情况下由 @source 文档属性过滤的主机名。
默认情况下,这些查询按术语顺序返回结果(然后可以按字母或数字对任何变量进行排序)。 要生成按文档计数排序的术语列表(前 N 个值列表),请添加“doc_count”的 orderBy 属性。 这会自动选择降序排序; 将“asc”与 doc_count(后 N 个列表)一起使用可以通过设置 order:“asc”来完成,但不鼓励这样做,因为它“增加了文档计数的错误”。 要保持文档计数顺序中的术语,请将变量的 Sort 下拉列表设置为 Disabled; 您可能仍然想使用例如 按字母顺序重新排序。
{"find": "terms", "field": "@hostname", "orderBy": "doc_count"}
在查询中使用变量
有两种语法:
- $<varname> 示例:@hostname:$hostname
- [[varname]] 示例:@hostname:[[hostname]]
为什么有两种方式? 第一种语法更易于阅读和编写,但不允许您在单词中间使用变量。 当启用多值或包括所有值选项时,Grafana 会将标签从纯文本转换为 lucene 兼容条件。
在上面的示例中,我们有一个 lucene 查询,它使用名为 $hostname 的变量根据 @hostname 属性过滤文档。 它还在按字段输入框中的术语分组中使用变量。 这允许您使用变量来快速更改数据的分组方式。
Example dashboard: Elasticsearch Templated Dashboard
注释
注释允许您在图表上叠加丰富的事件信息。 您可以通过仪表板菜单/注释视图添加注释查询。 Grafana 可以查询任何 Elasticsearch 索引以获取注释事件。
Name | Description |
---|---|
Query | You can leave the search query blank or specify a lucene query. |
Time | The name of the time field, needs to be date field. |
Time End | Optional name of the time end field needs to be date field. If set, then annotations will be marked as a region between time and time-end. |
Text | Event description field. |
Tags | Optional field name to use for event tags (can be an array or a CSV string). |
查询日志
探索和仪表板的日志面板中提供了从 Elasticsearch 查询和显示日志数据的功能。 选择 Elasticsearch 数据源,然后可选择输入 lucene 查询以显示您的日志。
在探索中从 Prometheus 或 Loki 数据源切换时,您的查询将转换为具有正确 Lucene 过滤器的 Elasticsearch 日志查询。
日志查询
返回结果后,日志面板会显示日志行列表和条形图,其中 x 轴显示时间,y 轴显示频率/计数。
请注意,用于日志消息和级别的字段基于可选的数据源配置。
过滤日志消息
(可选)在查询字段中输入 lucene 查询以过滤日志消息。 例如,使用默认的 Filebeat 设置,您应该能够使用 fields.level:error 仅显示错误日志消息。
使用供应配置数据源
现在可以通过 Grafana 的配置系统使用配置文件配置数据源。 您可以在配置文档页面上阅读有关它的工作原理以及可以为数据源设置的所有设置的更多信息
以下是此数据源的一些供应示例。
apiVersion: 1
datasources:
- name: Elastic
type: elasticsearch
access: proxy
database: '[metrics-]YYYY.MM.DD'
url: http://localhost:9200
jsonData:
interval: Daily
timeField: '@timestamp'
or, for logs:
apiVersion: 1
datasources:
- name: elasticsearch-v7-filebeat
type: elasticsearch
access: proxy
database: '[filebeat-]YYYY.MM.DD'
url: http://localhost:9200
jsonData:
interval: Daily
timeField: '@timestamp'
esVersion: '7.0.0'
logMessageField: message
logLevelField: fields.level
dataLinks:
- datasourceUid: my_jaeger_uid # Target UID needs to be known
field: traceID
url: '$${__value.raw}' # Careful about the double "$$" because of env var expansion