配置 Elasticsearch 输出
编辑

Elasticsearch 输出使用 Elasticsearch HTTP API 将事件直接发送到 Elasticsearch。

配置示例

output.elasticsearch:
  hosts: ["https://myEShost:9200"] 

要启用 SSL,请将 https 添加到 hosts 下定义的所有 URL。

当通过 elasticsearch 输出将数据发送到受保护的集群时,APM Server 可以使用以下任何一种身份验证方法

  • 基本身份验证凭据(用户名和密码)。
  • 基于令牌(API 密钥)的身份验证。
  • 公钥基础设施 (PKI) 证书。

基本身份验证

output.elasticsearch:
  hosts: ["https://myEShost:9200"]
  username: "apm_writer"
  password: "YOUR_PASSWORD"

API 密钥身份验证

output.elasticsearch:
  hosts: ["https://myEShost:9200"]
  api_key: "ZCV7VnwBgnX0T19fN8Qe:KnR6yE41RrSowb0kQ0HWoA"

PKI 证书身份验证

output.elasticsearch:
  hosts: ["https://myEShost:9200"]
  ssl.certificate: "/etc/pki/client/cert.pem"
  ssl.key: "/etc/pki/client/cert.key"

有关每种身份验证方法的详细信息,请参阅 与 Elasticsearch 的安全通信

兼容性编辑

此输出适用于所有兼容版本的 Elasticsearch。请参阅 Elastic 支持矩阵

配置选项编辑

您可以在 apm-server.yml 配置文件的 elasticsearch 部分中指定以下选项

enabled编辑

enabled 配置是一个布尔值设置,用于启用或禁用输出。如果设置为 false,则禁用输出。

默认值为 true

hosts编辑

要连接的 Elasticsearch 节点列表。事件以循环方式分发到这些节点。如果一个节点无法访问,则会自动将事件发送到另一个节点。每个 Elasticsearch 节点都可以定义为 URLIP:PORT。例如:http://192.15.3.2https://es.found.io:9230192.24.3.2:9300。如果未指定端口,则使用 9200

当节点定义为 IP:PORT 时,schemepath 取自 protocolpath 配置选项。

output.elasticsearch:
  hosts: ["10.45.3.2:9220", "10.45.3.1:9230"] 
  protocol: https
  path: /elasticsearch

在前面的示例中,Elasticsearch 节点在 https://10.45.3.2:9220/elasticsearchhttps://10.45.3.1:9230/elasticsearch 上可用。

compression_level编辑

gzip 压缩级别。将此值设置为 0 会禁用压缩。压缩级别必须在 1(最佳速度)到 9(最佳压缩)的范围内。

提高压缩级别将减少网络使用量,但会增加 CPU 使用量。

默认值为 0

escape_html编辑

配置字符串中 HTML 的转义。设置为 true 以启用转义。

默认值为 false

api_key编辑

您可以使用 API 密钥来保护与 Elasticsearch 的通信,而不是使用用户名和密码。该值必须是 API 密钥的 ID 和 API 密钥,以冒号连接:id:api_key

有关详细信息,请参阅 使用 API 密钥授予访问权限

username编辑

用于连接到 Elasticsearch 的基本身份验证用户名。

此用户需要将事件发布到 Elasticsearch 所需的权限。要创建这样的用户,请参阅 创建 writer 角色

password编辑

用于连接到 Elasticsearch 的基本身份验证密码。

parameters编辑

要与索引操作一起传递到 URL 中的 HTTP 参数字典。

protocol编辑

Elasticsearch 可访问的协议名称。选项为:httphttps。默认值为 http。但是,如果您为 hosts 指定了 URL,则 protocol 的值将被您在 URL 中指定的任何 scheme 覆盖。

path编辑

一个 HTTP 路径前缀,它被添加到 HTTP API 调用之前。这对于 Elasticsearch 在导出自定义前缀下的 API 的 HTTP 反向代理之后侦听的情况很有用。

headers编辑

要添加到 Elasticsearch 输出创建的每个请求的自定义 HTTP 标头。示例

output.elasticsearch.headers:
  X-My-Header: Header contents

可以通过使用逗号分隔相同标头名称的多个标头值。

proxy_url编辑

连接到 Elasticsearch 服务器时要使用的代理的 URL。该值可以是完整的 URL 或“host[:port]”,在这种情况下,将假定为“http”方案。如果未通过配置文件指定值,则使用代理环境变量。有关环境变量的更多信息,请参阅 Go 文档

max_retries编辑

发布失败后重试发布事件的次数。在指定次数的重试之后,通常会丢弃这些事件。

max_retries 设置为小于 0 的值,以重试直到发布所有事件。

默认值为 3。

flush_bytes编辑

刷新到 Elasticsearch 之前的批量请求大小阈值(以字节为单位)。该值必须带有后缀,例如 "2MB"。默认值为 1MB

flush_interval编辑

在刷新到 Elasticsearch 之前为批量请求累积事件的最长持续时间。该值必须具有持续时间后缀,例如 "5s"。默认值为 1s

backoff.init编辑

在发生网络错误后尝试重新连接到 Elasticsearch 之前等待的秒数。等待 backoff.init 秒后,APM Server 将尝试重新连接。如果尝试失败,则退避计时器将呈指数增长,直到达到 backoff.max。成功连接后,将重置退避计时器。默认值为 1s

backoff.max编辑

在发生网络错误后尝试连接到 Elasticsearch 之前等待的最长秒数。默认值为 60s

timeout编辑

Elasticsearch 请求的 HTTP 请求超时时间(以秒为单位)。默认值为 90。

SSL 参数的配置选项,例如用于基于 HTTPS 的连接的证书颁发机构。如果缺少 ssl 部分,则主机 CA 将用于与 Elasticsearch 的 HTTPS 连接。

有关详细信息,请参阅 与 Elasticsearch 的安全通信指南或 SSL 配置参考

与 Elasticsearch 的安全通信编辑

当通过 elasticsearch 输出将数据发送到受保护的集群时,APM Server 可以使用以下任何一种身份验证方法

  • 基本身份验证凭据(用户名和密码)。
  • 基于令牌的 API 身份验证。
  • 客户端证书。

在 APM Server 配置文件中指定身份验证

  • 要使用基本身份验证,请在 output.elasticsearch 下指定 usernamepassword 设置。例如

    output.elasticsearch:
      hosts: ["https://myEShost:9200"]
      username: "apm_writer" 
      password: "YOUR_PASSWORD"

    此用户需要将事件发布到 Elasticsearch 所需的权限。要创建这样的用户,请参阅 创建 writer 角色

  • 要使用基于令牌的API 密钥身份验证,请在 output.elasticsearch 下指定 api_key。例如

    output.elasticsearch:
      hosts: ["https://myEShost:9200"]
      api_key: "KnR6yE41RrSowb0kQ0HWoA" 

    此 API 密钥必须具有将事件发布到 Elasticsearch 所需的权限。要创建这样的 API 密钥,请参阅 使用 API 密钥授予访问权限

  • 要使用公钥基础设施 (PKI) 证书来验证用户身份,请在 output.elasticsearch 下指定 certificatekey 设置。例如

    output.elasticsearch:
      hosts: ["https://myEShost:9200"]
      ssl.certificate: "/etc/pki/client/cert.pem" 
      ssl.key: "/etc/pki/client/cert.key" 

    SSL 客户端身份验证的证书路径

    客户端证书密钥

    这些设置假定证书中的可分辨名称 (DN) 映射到 Elasticsearch 集群中每个节点上的 role_mapping.yml 文件中的相应角色。有关更多信息,请参阅 使用角色映射文件

    默认情况下,APM Server 使用运行 APM Server 的操作系统中受信任的证书颁发机构 (CA) 列表。如果对节点证书进行签名的证书颁发机构不在主机系统的受信任证书颁发机构列表中,则需要将包含 CA 证书的 .pem 文件路径添加到 APM Server 配置。这将配置 APM Server 以使用特定的 CA 证书列表,而不是操作系统中的默认列表。

    这是一个配置示例

    output.elasticsearch:
      hosts: ["https://myEShost:9200"]
      ssl.certificate_authorities: 
        - /etc/pki/my_root_ca.pem
        - /etc/pki/my_other_ca.pem
      ssl.certificate: "/etc/pki/client.pem" 
      ssl.key: "/etc/pki/key.pem" 

    指定包含您的证书颁发机构证书的本地 .pem 文件路径。如果您使用自己的 CA 对节点证书进行签名,则需要这样做。

    SSL 客户端身份验证的证书路径

    客户端证书密钥

    对于任何给定的连接,SSL/TLS 证书必须具有与为 hosts 指定的值匹配的主题,否则 SSL 握手将失败。例如,如果您指定 hosts: ["foobar:9200"],则证书必须在主题 (CN=foobar) 或作为主题备用名称 (SAN) 中包含 foobar。确保主机名解析为正确的 IP 地址。如果没有 DNS 可用,那么您可以在 /etc/hosts (Unix) 或 C:\Windows\System32\drivers\etc\hosts (Windows) 中将 IP 地址与您的主机名关联起来。

了解有关安全通信的更多信息编辑

有关向安全集群发送数据的更多信息,请参阅配置参考。