Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Istio中,到底怎么获取 Envoy 访问日志?

在Istio中,到底怎么获取 Envoy 访问日志?

作者头像
万猫学社
发布于 2022-12-01 08:06:55
发布于 2022-12-01 08:06:55
86700
代码可运行
举报
运行总次数:0
代码可运行

Envoy 访问日志记录了通过 Envoy 进行请求 / 响应交互的相关记录,可以方便地了解具体通信过程和调试定位问题。

环境准备

部署 httpbin 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f samples/httpbin/httpbin.yaml

部署 sleep 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f samples/sleep/sleep.yaml 

httpbin 服务作为接收请求的服务端, sleep 服务作为发送请求的客户端。

还需要开启 Envoy 访问日志,执行以下命令修改 istio 配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n istio-system edit configmap istio

编辑yaml文件的对应配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data:
  mesh: |-
    accessLogEncoding: JSON
    accessLogFile: /dev/stdout

其中,accessLogEncoding表示 accesslog 输出格式,Istio 预定义了 TEXTJSON 两种日志输出格式。默认使用 TEXT,通常改成 JSON 以提升可读性;accessLogFile:表示 accesslog 输出位置,通常指定到 /dev/stdout (标准输出),以便使用 kubectl logs 来查看日志。

保证yaml文件后,配置随即生效。

测试访问日志

sleep 服务中向 httpbin 服务发出请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export SLEEP_POD=$(kubectl get pods -l app=sleep -o 'jsonpath={.items[0].metadata.name}')
kubectl exec "$SLEEP_POD" -c sleep -- curl -sS http://httpbin:8000/headers

返回结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin:8000", 
    "User-Agent": "curl/7.81.0-DEV", 
    "X-B3-Parentspanid": "ed0178f3e1f48dd1", 
    "X-B3-Sampled": "0", 
    "X-B3-Spanid": "6c38b689ee5ab0c8", 
    "X-B3-Traceid": "f17ce19c174cae85ed0178f3e1f48dd1", 
    "X-Envoy-Attempt-Count": "1", 
    "X-Forwarded-Client-Cert": "......"
  }
}

执行以下命令,查看sleep 服务的Envoy日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl logs -l app=sleep -c istio-proxy

可以看到sleep服务对httpbin服务的调用的日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
     "authority": "httpbin:8000",
     "bytes_received": ,
     "bytes_sent": ,
     "connection_termination_details": null,
     "downstream_local_address": "172.24.146.239:8000",
     "downstream_remote_address": "172.24.158.25:49350",
     "duration": ,
     "method": "GET",
     "path": "/headers",
     "protocol": "HTTP/1.1",
     "request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
     "requested_server_name": null,
     "response_code": ,
     "response_code_details": "via_upstream",
     "response_flags": "-",
     "route_name": "default",
     "start_time": "2022-07-04T10:00:09.401Z",
     "upstream_cluster": "outbound|8000||httpbin.istio-demo.svc.cluster.local",
     "upstream_host": "172.24.158.96:80",
     "upstream_local_address": "172.24.158.25:41812",
     "upstream_service_time": "2",
     "upstream_transport_failure_reason": null,
     "user_agent": "curl/7.81.0-DEV",
     "x_forwarded_for": null
}

执行以下命令,查看httpbin 服务的Envoy日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl logs -l app=httpbin -c istio-proxy

可以看到httpbin服务被sleep服务调用的Envoy日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
     "authority": "httpbin:8000",
     "bytes_received": ,
     "bytes_sent": ,
     "connection_termination_details": null,
     "downstream_local_address": "172.24.158.96:80",
     "downstream_remote_address": "172.24.158.25:41812",
     "duration": ,
     "method": "GET",
     "path": "/headers",
     "protocol": "HTTP/1.1",
     "request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
     "requested_server_name": "outbound_.8000_._.httpbin.istio-demo.svc.cluster.local",
     "response_code": ,
     "response_code_details": "via_upstream",
     "response_flags": "-",
     "route_name": "default",
     "start_time": "2022-07-04T10:00:09.401Z",
     "upstream_cluster": "inbound|80||",
     "upstream_host": "172.24.158.96:80",
     "upstream_local_address": "127.0.0.6:33665",
     "upstream_service_time": "1",
     "upstream_transport_failure_reason": null,
     "user_agent": "curl/7.81.0-DEV",
     "x_forwarded_for": null
}

看到这么多参数,是不是有点懵逼?没关系接下来,我们详细看看!

刨析Envoy日志

清理

删除 httpbinsleep 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl delete -f samples/httpbin/httpbin.yaml
kubectl delete -f samples/sleep/sleep.yaml 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 万猫学社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
初探 Istio Ambient 模式
Ambient 是 Istio 刚刚宣布支持的一种新的数据面模式,在本篇文章中,我们将尝试安装 Istio 的 ambient 模式,并采用 bookinfo demo 来体验 ambient 提供的 L4 和 L7 能力。
赵化冰
2022/09/28
7830
初探 Istio Ambient 模式
深入理解Istio流量管理的熔断配置
httpbin 是一个使用 Python + Flask 编写的 HTTP 请求响应服务。
万猫学社
2022/12/01
4250
深入理解Istio流量管理的熔断配置
Istio安全-授权(实操三)
部署Bookinfo。由于下例在策略中使用了principal和namespace,因此需要启用mutual TLS。
charlieroro
2020/09/03
1.4K0
深入理解 Istio 流量管理的超时时间设置
httpbin 服务作为接收请求的服务端, sleep 服务作为发送请求的客户端。
万猫学社
2022/12/01
9030
深入理解 Istio 流量管理的超时时间设置
Istio组件日志设置[通俗易懂]
编辑istio-system.deployment.istio-pilot,修改args中–log_output_level=default:指定日志级别
全栈程序员站长
2022/08/01
1.7K0
Istio组件日志设置[通俗易懂]
Service Mesh - Istio服务观测篇
Kiali属于Istio的集成组件之一,是一个用于Istio的可观测性控制台,具有服务网格配置和验证功能。它通过监控网络流量来推断服务拓扑和报告错误,帮助你了解服务网格的结构和运行状况。Kiali提供了详细的度量和基本的Grafana集成,可用于高级查询。
端碗吹水
2020/12/28
1K0
Service Mesh - Istio服务观测篇
istio 数据面调试指南
这是使用 istio 最常见的困境:在微服务中引入 envoy 作为代理后,当流量访问和预期行为不符时,用户很难快速确定问题是出在哪个环节。客户端收到的异常响应,诸如 403、404、503 或者连接中断等,可能是链路中任一 sidecar 执行流量管控的结果, 但也有可能是来自某个服务的合理逻辑响应。
钟华
2020/02/12
2.7K0
Istio-EnvoyFilter配置浅谈
EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 来修改某些字段的值,添加特定的过滤器,甚至添加全新的 listener、cluster 等。 这个功能必须谨慎使用,因为不正确的配置可能破坏整个网格的稳定性。 对于特定命名空间中的特定工作负载,可以存在任意数量的 EnvoyFilter。
tunsuy
2023/11/13
7740
Istio-EnvoyFilter配置浅谈
Istio 中实现客户端源 IP 的保持
尹烨,腾讯专家工程师, 腾讯云 TCM 产品负责人。在 K8s、Service Mesh 等方面有多年的实践经验。 导语 对于很多后端服务业务,我们都希望得到客户端源 IP。云上的负载均衡器,比如,腾讯云 CLB 支持将客户端源IP传递到后端服务。但在使用 istio 的时候,由于 istio ingressgateway 以及 sidecar 的存在,后端服务如果需要获取客户端源 IP,特别是四层协议,情况会变得比较复杂。 正文 很多业务场景,我们都希望得到客户端源 IP。云上负载均衡器,比如,腾讯云 C
腾讯云原生
2022/06/08
2.6K0
Istio 中实现客户端源 IP 的保持
Istio 可观测性之日志
访问日志提供了一种从单个工作负载实例的角度监控和理解行为的方法,同样访问日志是我们在生产环境中必不可少的一种监控手段,Istio 通过 Envoy 来提供访问日志功能,Envoy Proxy 打印访问信息到标准输出,Envoy 容器的标准输出能够通过 kubectl logs 命令打印出来。
我是阳明
2023/12/05
8320
Istio 可观测性之日志
istio 实用技巧: 局部启用 accesslog
在生产环境中,有时我们不想全局启用 accesslog,只想为部分 namespace 或 workload 启用 accesslog,而 istio 对 accesslog 的配置是全局的,如何只为部分数据面启用 accesslog 呢?下面介绍具体操作方法。
imroc
2021/05/14
1.5K0
Istio安全-认证(istio 系列七)
首先了解istio的认证策略和相关的mutual TLS认证概念,然后使用default配置安装istio
charlieroro
2020/07/16
2.9K0
istio请求路由分析
•httpbin访问sleep:80端口•iptables拦截转发到15001 的15001端口
有点技术
2020/07/22
1.6K0
腾讯云-Istio案例分析: 请求中断分析
请求异常,到底是 istio 流控规则导致,还是业务应用的返回,流量断点出现在哪个具体的 pod?
朱瑞卿
2020/11/27
2.7K0
腾讯云-Istio案例分析: 请求中断分析
六, 跨语言微服务框架 - Istio Ingress和Egress详解(解决Istio无法外网访问问题)
在微服务中另外一个重点就是网关,网关理论包含入口网关和出口网关,传统意义上的网关很难做到出口网络控制,但是对于Istio是一件非常轻松的事情(因为所有的出口流量都会经过Istio),入口网关控制解析路由数据流向,出口网关控制对外访问的限制,在Istio中使用了 Ingress和Egress 来实现网关的功能.
喵了个咪233
2019/05/26
4.5K0
Istio服务网格的可观察性
前面我们学习了 Istio 中的流量管理功能,本节我们来学习如何配置 Istio来自动收集网格中的服务遥测。Istio为网格内所有的服务通信生成详细的遥测数据,这种遥测技术提供了服务的可观察性,使运维人员能够排查故障、维护和优化应用程序,而不会给服务的开发人员带来任何额外的负担。通过 Istio,运维人员可以全面了解到受监控的服务如何与其他服务以及Istio组件进行交互。
王先森sec
2023/04/24
8910
Istio服务网格的可观察性
Istio中的流量配置
Istio的数据面会在pod中注入两个容器:istio-init和istio-proxy。
charlieroro
2020/09/22
2.4K0
Istio中的流量配置
Service Mesh - Istio安全篇
接下来我们配置一个安全网关,为外部提供 HTTPS 的访问方式。首先,确认 curl 命令是否通过LibreSSL去编译的:
端碗吹水
2020/12/28
6580
Service Mesh - Istio安全篇
istio1.9中新的外部授权策略
istio 中的授权策略为网格内部的服务提供访问控制。授权策略是快速、强大及被广泛使用的功能,自istio 1.4首次发布以来,我们进行了持续改进,以使策略更加灵活,包含 DENY action, 排除语义, X-Forwarded-For 头支持, 嵌套 JWT claim 支持等,这些功能提高了授权策略的灵活性,但是此模型仍然不支持许多用例,例如:
有点技术
2021/03/08
1.7K0
istio1.9中新的外部授权策略
使用 Sidecar CRD 优化 Istio 性能
我们知道在服务网格集群中的每个工作负载实例上都会透明地注入一个 Istio sidecar 代理,这个代理拦截负载的出入流量,并根据配置完成相应的流量管理,包括流量、安全、可观测性等等。为了更加细粒度的控制代理的行为,从 1.1 版本开始 Istio 便引入了和服务网格数据面 Sidecar 同名的 Sidecar CRD 资源对象,控制负载上的出入流量以及课访问的目标服务等。
我是阳明
2023/12/19
3090
使用 Sidecar CRD 优化 Istio 性能
相关推荐
初探 Istio Ambient 模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验