Istio 集成
编辑Istio 集成
编辑此集成摄取由 Istio 服务网格创建的访问日志和指标。
兼容性
编辑Istio 数据集已使用 Istio 1.14.3 进行测试。
日志
编辑访问日志
编辑access_logs
数据流收集 Istio 访问日志。
示例
以下是 access
的示例事件
{ "@timestamp": "2022-07-20T09:52:24.955Z", "data_stream": { "namespace": "default", "type": "logs", "dataset": "istio.access_logs" }, "destination": { "address": "10.68.2.10:9080", "ip": "10.68.2.10", "port": 9080 }, "ecs": { "version": "8.3.0" }, "event": { "category": [ "web" ], "created": "2020-04-28T11:07:58.223Z", "duration": 1000000, "id": "785918d6-06b6-9312-bf77-6d9bd968dc21", "ingested": "2022-07-20T11:05:15.804584205Z", "kind": "event", "module": "istio", "original": "[2022-07-20T09:52:24.955Z] \"GET /details/0 HTTP/1.1\" 200 - via_upstream - \"-\" 0 178 2 1 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36\" \"785918d6-06b6-9312-bf77-6d9bd968dc21\" \"details:9080\" \"10.68.2.10:9080\" inbound|9080|| 127.0.0.6:47889 10.68.2.10:9080 89.160.20.156:39696 outbound_.9080_._.details.default.svc.cluster.local default", "outcome": "success", "type": [ "access" ] }, "http": { "request": { "body": { "bytes": 178 }, "id": "785918d6-06b6-9312-bf77-6d9bd968dc21", "method": "GET" }, "response": { "body": { "bytes": 0 }, "status_code": 200 }, "version": "1.1" }, "istio": { "access": { "authority": "details:9080", "bytes": { "received": 0, "sent": 178 }, "downstream": { "local_address": "10.68.2.10:9080", "remote_address": "89.160.20.156:39696" }, "duration": 2, "requested_server_name": "outbound_.9080_._.details.default.svc.cluster.local", "response": { "code_details": "via_upstream" }, "route_name": "default", "upstream": { "local_address": "127.0.0.6:47889", "cluster": "inbound|9080||", "host": "10.68.2.10:9080", "service_time": 1 } } }, "network": { "community_id": "1:Kd61jBZsKdDUbZUBs5s/VI08qc0=", "protocol": "http", "transport": "tcp" }, "related": { "ip": [ "89.160.20.156", "10.68.2.10" ] }, "source": { "address": "89.160.20.156:39696", "as": { "number": 29518, "organization": { "name": "Bredband2 AB" } }, "geo": { "city_name": "Linköping", "continent_name": "Europe", "country_iso_code": "SE", "country_name": "Sweden", "location": { "lat": 58.4167, "lon": 15.6167 }, "region_iso_code": "SE-E", "region_name": "Östergötland County" }, "ip": "89.160.20.156", "port": 39696 }, "tags": [ "preserve_original_event" ], "url": { "original": "/details/0" }, "user_agent": { "device": { "name": "Mac" }, "name": "Chrome", "original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36", "os": { "full": "Mac OS X 10.15.7", "name": "Mac OS X", "version": "10.15.7" }, "version": "103.0.5060.114" } }
导出的字段
字段 | 描述 | 类型 |
---|---|---|
@timestamp |
事件时间戳。 |
日期 |
agent.ephemeral_id |
此代理的临时标识符(如果存在)。此 ID 通常在重启时更改,但 |
关键词 |
agent.id |
此代理的唯一标识符(如果存在)。示例:对于 Beats,这将是 beat.id。 |
关键词 |
agent.name |
代理的自定义名称。这是一个可以分配给代理的名称。例如,如果两个 Filebeat 实例在同一主机上运行,但需要以人类可读的方式分隔数据来自哪个 Filebeat 实例,则这会很有帮助。 |
关键词 |
agent.type |
代理的类型。代理类型始终保持不变,应由使用的代理给出。在 Filebeat 的情况下,即使两个 Filebeat 实例在同一台计算机上运行,代理也始终是 Filebeat。 |
关键词 |
agent.version |
代理的版本。 |
关键词 |
container.runtime |
管理此容器的运行时。 |
关键词 |
data_stream.dataset |
数据流数据集。 |
常量关键词 |
data_stream.namespace |
数据流命名空间。 |
常量关键词 |
data_stream.type |
数据流类型。 |
常量关键词 |
destination.address |
某些事件目标地址的定义是模棱两可的。事件有时会列出 IP、域或 Unix 套接字。您应始终将原始地址存储在 |
关键词 |
destination.domain |
目标系统的域名。此值可以是主机名、完全限定的域名或其他主机命名格式。该值可能源自原始事件,也可能来自富化。 |
关键词 |
destination.ip |
目标的 IP 地址(IPv4 或 IPv6)。 |
ip |
destination.port |
目标的端口。 |
长整型 |
ecs.version |
此事件符合的 ECS 版本。 |
关键词 |
error.message |
错误消息。 |
仅匹配文本 |
event.category |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的第二级。 |
关键词 |
event.created |
|
日期 |
event.dataset |
事件数据集 |
常量关键词 |
event.duration |
事件的持续时间(以纳秒为单位)。如果知道 |
长整型 |
event.id |
描述事件的唯一 ID。 |
关键词 |
event.ingested |
事件到达中央数据存储的时间戳。这与 |
日期 |
event.kind |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的最高级别。 |
关键词 |
event.module |
事件模块 |
常量关键词 |
event.original |
整个事件的原始文本消息。用于演示日志完整性,或在需要完整日志消息(在将其拆分为多个部分之前)的情况下(例如,对于重新索引)。此字段未编入索引,并且 doc_values 已禁用。它无法搜索,但可以从 |
关键词 |
event.outcome |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的最低级别。 |
关键词 |
event.type |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的第三级。 |
关键词 |
http.request.body.bytes |
请求正文的大小(以字节为单位)。 |
长整型 |
http.request.id |
每个 HTTP 请求的唯一标识符,用于关联客户端和服务器之间的事务日志。该 ID 可能包含在非标准的 HTTP 标头中,例如 |
关键词 |
http.request.method |
HTTP 请求方法。该值应保留其原始事件的大小写。例如, |
关键词 |
http.response.body.bytes |
响应正文的大小(以字节为单位)。 |
长整型 |
http.response.status_code |
HTTP 响应状态代码。 |
长整型 |
http.version |
HTTP 版本。 |
关键词 |
istio.access.authority |
Host (HTTP/1.1) 或 Authority (HTTP/2) 标头的值。 |
关键词 |
istio.access.bytes.received |
对于 HTTP/THRIFT,此字段是接收的正文字节数。对于 TCP,此字段是连接上接收的下游字节数。对于 UDP,此字段未实现 (0)。 |
长整型 |
istio.access.bytes.sent |
对于 HTTP/THRIFT,此字段是发送的正文字节数。对于 WebSocket 连接,它还将包括响应标头字节。对于 TCP,此字段是连接上发送的下游字节数。对于 UDP,此字段未实现 (0)。 |
长整型 |
istio.access.connection_termination_details |
连接终止详细信息可能会提供有关 Envoy 因 L4 原因终止连接的其他信息。 |
文本 |
istio.access.downstream.local_address |
下游连接的本地地址。如果地址是 IP 地址,则包括地址和端口。 |
关键词 |
istio.access.downstream.remote_address |
下游连接的远程地址。如果地址是 IP 地址,则包括地址和端口。 |
关键词 |
istio.access.duration |
对于 HTTP/THRIFT,此字段是从开始时间到最后一个字节输出的请求总持续时间(以毫秒为单位)。对于 TCP,此字段是下游连接的总持续时间(以毫秒为单位)。对于 UDP,此字段未实现 (0)。 |
长整型 |
istio.access.log |
自定义 Json 格式的访问日志。 |
关键词 |
istio.access.requested_server_name |
对于 HTTP/TCP/THRIFT,此字段是为服务器名称指示 (SNI) 设置在 SSL 连接套接字上的字符串值。对于 UDP,此字段未实现 ("-")。 |
关键词 |
istio.access.response.code_details |
有关响应代码的其他信息,例如谁设置了响应代码(上游或 Envoy)以及原因。对于 TCP/UDP,此字段未实现 ("-")。 |
文本 |
istio.access.response.flags |
有关响应或连接的其他详细信息。未为 UDP 实现的字段 ("-")。 |
关键词 |
istio.access.route_name |
对于 HTTP/TCP,此字段是路由的名称。对于 UDP,此字段未实现 ("-")。 |
关键词 |
istio.access.upstream.cluster |
上游主机所属的上游集群。如果提供,将使用 alt_stat_name。 |
文本 |
istio.access.upstream.host |
上游主机 URL(例如,TCP 连接的 tcp://ip:port)。 |
关键词 |
istio.access.upstream.local_address |
上游连接的本地地址。如果地址是 IP 地址,则包括地址和端口。 |
关键词 |
istio.access.upstream.service_time |
Envoy 上游服务时间。 |
长整型 |
istio.access.upstream.transport_failure_reason |
对于 HTTP,如果上游连接由于传输套接字(例如 TLS 握手)失败,则提供来自传输套接字的失败原因。此字段的格式取决于配置的上游传输套接字。对于 TCP/UDP,此字段未实现(“-”)。 |
文本 |
istio.access.x_forwarded_for |
x_forwarded_for (XFF) 是一个标准的代理标头,它指示请求从客户端到服务器的路径上所经过的 IP 地址。 |
关键词 |
log.file.device_id |
包含文件系统的设备的 ID,文件位于该文件系统中。 |
关键词 |
log.file.fingerprint |
启用指纹识别时,文件的 sha256 指纹标识。 |
关键词 |
log.file.idxhi |
与文件关联的唯一标识符的高位部分。(仅限 Windows) |
关键词 |
log.file.idxlo |
与文件关联的唯一标识符的低位部分。(仅限 Windows) |
关键词 |
log.file.inode |
日志文件的 Inode 号。 |
关键词 |
log.file.vol |
包含文件的卷的序列号。(仅限 Windows) |
关键词 |
message |
对于日志事件,message 字段包含日志消息,针对在日志查看器中查看进行了优化。对于没有原始消息字段的结构化日志,可以将其他字段连接起来,形成事件的人类可读摘要。如果存在多条消息,可以将它们组合成一条消息。 |
仅匹配文本 |
network.community_id |
源 IP 地址和目标 IP 地址、端口以及通信中使用的协议的哈希值。这是一个与工具无关的用于标识流的标准。有关详细信息,请访问 https://github.com/corelight/community-id-spec。 |
关键词 |
network.protocol |
在 OSI 模型中,这将是应用层协议。例如, |
关键词 |
network.transport |
与 network.iana_number 相同,但使用的是传输层的关键字名称(udp、tcp、ipv6-icmp 等)。字段值必须规范化为小写以进行查询。 |
关键词 |
related.ip |
在您的事件中看到的所有 IP 地址。 |
ip |
source.address |
某些事件源地址的定义不明确。事件有时会列出 IP、域名或 Unix 套接字。您应该始终将原始地址存储在 |
关键词 |
source.as.number |
分配给自治系统的唯一编号。自治系统号 (ASN) 唯一标识 Internet 上的每个网络。 |
长整型 |
source.as.organization.name |
组织名称。 |
关键词 |
source.as.organization.name.text |
|
仅匹配文本 |
source.domain |
源系统的域名。此值可以是主机名、完全限定域名或其他主机命名格式。该值可能来自原始事件或从增强功能中添加。 |
关键词 |
source.geo.city_name |
城市名称。 |
关键词 |
source.geo.continent_name |
大陆的名称。 |
关键词 |
source.geo.country_iso_code |
国家/地区的 ISO 代码。 |
关键词 |
source.geo.country_name |
国家/地区名称。 |
关键词 |
source.geo.location.lat |
经度和纬度。 |
geo_point |
source.geo.location.lon |
经度和纬度。 |
geo_point |
source.geo.region_iso_code |
区域 ISO 代码。 |
关键词 |
source.geo.region_name |
区域名称。 |
关键词 |
source.ip |
源的 IP 地址(IPv4 或 IPv6)。 |
ip |
source.port |
源的端口。 |
长整型 |
tags |
用于标记每个事件的关键字列表。 |
关键词 |
url.original |
事件源中看到的未修改的原始 URL。请注意,在网络监控中,观察到的 URL 可能是完整的 URL,而在访问日志中,URL 通常仅表示为路径。此字段旨在表示观察到的 URL,无论是否完整。 |
wildcard |
url.original.text |
|
仅匹配文本 |
user_agent.device.name |
设备的名称。 |
关键词 |
user_agent.name |
用户代理的名称。 |
关键词 |
user_agent.original |
未解析的 user_agent 字符串。 |
关键词 |
user_agent.original.text |
|
仅匹配文本 |
user_agent.os.full |
操作系统名称,包括版本或代码名称。 |
关键词 |
user_agent.os.full.text |
|
仅匹配文本 |
user_agent.os.name |
操作系统名称,不带版本。 |
关键词 |
user_agent.os.name.text |
|
仅匹配文本 |
user_agent.os.version |
操作系统的版本,以原始字符串形式表示。 |
关键词 |
user_agent.version |
用户代理的版本。 |
关键词 |
指标
编辑Istiod 指标
编辑istiod_metrics
数据流收集 Istiod 指标。
示例
istiod
的示例事件如下所示
{ "istio": { "istiod": { "metrics": { "pilot_xds_config_size_bytes": { "histogram": { "counts": [ 0, 0, 0, 0, 0, 0, 0 ], "values": [ 0.5, 5000.5, 505000, 2500000, 7000000, 25000000, 70000000 ] } } }, "labels": { "instance": "10.124.0.8:15014", "type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "job": "istio" } } }, "@timestamp": "2022-09-23T09:30:56.055Z", "ecs": { "version": "8.6.0" }, "data_stream": { "namespace": "default", "type": "metrics", "dataset": "istio.istiod_metrics" }, "metricset": { "period": 10000 }, "event": { "duration": 10806443, "agent_id_status": "verified", "kind": "metric", "ingested": "2022-09-23T09:30:57Z", "module": "istio", "dataset": "istio.istiod_metrics" } }
导出的字段
字段 | 描述 | 类型 | 指标类型 |
---|---|---|---|
@timestamp |
事件时间戳。 |
日期 |
|
agent.id |
此代理的唯一标识符(如果存在)。示例:对于 Beats,这将是 beat.id。 |
关键词 |
|
cloud.account.id |
云帐户或组织 ID,用于在多租户环境中标识不同的实体。示例:AWS 账户 ID、Google Cloud ORG ID 或其他唯一标识符。 |
关键词 |
|
cloud.availability_zone |
此主机、资源或服务所在的可用区。 |
关键词 |
|
cloud.instance.id |
主机实例 ID。 |
关键词 |
|
cloud.provider |
云提供商的名称。示例值为 aws、azure、gcp 或 digitalocean。 |
关键词 |
|
cloud.region |
此主机、资源或服务所在的区域。 |
关键词 |
|
container.id |
唯一的容器 ID。 |
关键词 |
|
data_stream.dataset |
数据流数据集。 |
常量关键词 |
|
data_stream.namespace |
数据流命名空间。 |
常量关键词 |
|
data_stream.type |
数据流类型。 |
常量关键词 |
|
ecs.version |
此事件符合的 ECS 版本。 |
关键词 |
|
error.message |
错误消息。 |
仅匹配文本 |
|
event.dataset |
事件数据集 |
常量关键词 |
|
event.ingested |
事件到达中央数据存储的时间戳。这与 |
日期 |
|
event.kind |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的最高级别。 |
关键词 |
|
event.module |
事件模块 |
常量关键词 |
|
host.name |
主机的名称。它可以包含 Unix 系统上 |
关键词 |
|
istio.istiod.labels.* |
Istiod 指标标签 |
object |
|
istio.istiod.labels_id |
由标签生成的指纹。 |
关键词 |
|
istio.istiod.metrics.*.counter |
Istiod 计数器指标 |
object |
counter |
istio.istiod.metrics.*.histogram |
Istiod 直方图指标 |
object |
|
istio.istiod.metrics.*.rate |
Istiod 速率计数器指标 |
object |
gauge |
istio.istiod.metrics.*.value |
Istiod 计量指标 |
object |
gauge |
代理指标
编辑proxy_metrics
数据流收集 Istio 代理指标。
示例
proxy
的示例事件如下所示
{ "@timestamp": "2022-09-23T09:34:52.047Z", "data_stream": { "dataset": "istio.proxy_metrics", "namespace": "default", "type": "metrics" }, "ecs": { "version": "8.6.0" }, "event": { "agent_id_status": "verified", "dataset": "istio.proxy_metrics", "duration": 35506510, "ingested": "2022-09-23T09:34:52Z", "kind": "metric", "module": "istio" }, "istio": { "proxy": { "metrics": { "istio_agent_go_gc_duration_seconds": { "value": 0.000142478 } }, "labels": { "instance": "10.124.1.5:15020", "quantile": "0.25", "job": "istio" } } }, "metricset": { "period": 10000 } }
导出的字段
字段 | 描述 | 类型 | 指标类型 |
---|---|---|---|
@timestamp |
事件时间戳。 |
日期 |
|
agent.id |
此代理的唯一标识符(如果存在)。示例:对于 Beats,这将是 beat.id。 |
关键词 |
|
cloud.account.id |
云帐户或组织 ID,用于在多租户环境中标识不同的实体。示例:AWS 账户 ID、Google Cloud ORG ID 或其他唯一标识符。 |
关键词 |
|
cloud.availability_zone |
此主机、资源或服务所在的可用区。 |
关键词 |
|
cloud.instance.id |
主机实例 ID。 |
关键词 |
|
cloud.provider |
云提供商的名称。示例值为 aws、azure、gcp 或 digitalocean。 |
关键词 |
|
cloud.region |
此主机、资源或服务所在的区域。 |
关键词 |
|
container.id |
唯一的容器 ID。 |
关键词 |
|
data_stream.dataset |
数据流数据集。 |
常量关键词 |
|
data_stream.namespace |
数据流命名空间。 |
常量关键词 |
|
data_stream.type |
数据流类型。 |
常量关键词 |
|
ecs.version |
此事件符合的 ECS 版本。 |
关键词 |
|
error.message |
错误消息。 |
仅匹配文本 |
|
event.dataset |
事件数据集 |
常量关键词 |
|
event.ingested |
事件到达中央数据存储的时间戳。这与 |
日期 |
|
event.kind |
这是四个 ECS 分类字段之一,表示 ECS 类别层次结构中的最高级别。 |
关键词 |
|
event.module |
事件模块 |
常量关键词 |
|
host.name |
主机的名称。它可以包含 Unix 系统上 |
关键词 |
|
istio.proxy.labels.* |
Istio 代理指标标签 |
object |
|
istio.proxy.labels_id |
由标签生成的指纹。 |
关键词 |
|
istio.proxy.metrics.*.counter |
Istio 代理计数器指标 |
object |
counter |
istio.proxy.metrics.*.histogram |
Istio 代理直方图指标 |
object |
|
istio.proxy.metrics.*.rate |
Istio 代理速率计数器指标 |
object |
gauge |
istio.proxy.metrics.*.value |
Istio 代理计量指标 |
object |
gauge |
如何在本地设置和测试 Istio
编辑- 设置 Kubernetes 集群。由于 Istio 示例应用程序需要大量 RAM(> 10GB),因此最好使用托管的 Kubernetes 集群(任何云提供商都可以)。
- 在 Elastic Cloud 上设置 EK 集群。出于与 Istio 示例应用程序需要大量 RAM 相同的原因,通过 elastic-package 在您的笔记本电脑上运行 Elastic 集群是不可行的。作为替代方案,也可以使用 ECK。
- 在 Kubernetes 集群上启动 elastic agent。实现此目的的最简单方法是使用 Fleet Server。您可以在此处找到说明
- 按照说明下载 Istio cli。
- 通过说明安装 Istio。此基本安装使用命名空间
default
。这是我们将要运行 Istio 示例应用程序的同一命名空间。 - 通过说明部署示例应用程序
- 将应用程序开放给外部流量并确定入口 IP 和端口。此步骤略有不同,具体取决于 Kubernetes 的运行位置。有关更多信息,请访问此处和此处。以下命令应该足以使其正常工作。
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml istioctl analyze # since we are using a cloud environment with an external load balancer export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}') export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
在同一终端中运行以下命令,以在浏览器中打开该链接。这应该验证示例应用程序是否可访问。
open "http://$GATEWAY_URL/productpage"
- 生成一些到示例应用程序的流量
for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
- (可选)您可以通过说明可视化示例应用程序中的微服务图。
- 从注册表添加 Istio 集成。
- 使用“发现”选项卡并选择正确的数据视图来查看来自 Istio 集成的日志和/或指标
变更日志
编辑变更日志
版本 | 详细信息 | Kibana 版本 |
---|---|---|
0.6.0 |
增强功能 (查看拉取请求) |
— |
0.5.0 |
增强功能 (查看拉取请求) |
— |
0.4.2 |
错误修复 (查看拉取请求) |
— |
0.4.1 |
增强功能 (查看拉取请求) |
— |
0.4.0 |
增强功能 (查看拉取请求) |
— |
0.3.2 |
增强功能 (查看拉取请求) |
— |
0.3.1 |
增强功能 (查看拉取请求) |
— |
0.3.0 |
增强功能 (查看拉取请求) |
— |
0.2.6 |
增强功能 (查看拉取请求) |
— |
0.2.5 |
增强功能 (查看拉取请求) |
— |
0.2.4 |
增强功能 (查看拉取请求) |
— |
0.2.3 |
错误修复 (查看拉取请求) |
— |
0.2.2 |
增强功能 (查看拉取请求) |
— |
0.2.1 |
增强功能 (查看拉取请求) |
— |
0.2.0 |
增强 (查看拉取请求) |
— |
0.1.0 |
增强 (查看拉取请求) |
— |