首页 > 其他分享 >在Istio中,到底怎么获取 Envoy 访问日志?

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

时间:2023-06-12 09:00:53浏览次数:31  
标签:kubectl httpbin Envoy Istio sleep upstream 日志

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

环境准备

部署 httpbin 服务:

kubectl apply -f samples/httpbin/httpbin.yaml

部署 sleep 服务:

kubectl apply -f samples/sleep/sleep.yaml 

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

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

kubectl -n istio-system edit configmap istio

编辑yaml文件的对应配置:

data:
  mesh: |-
    accessLogEncoding: JSON
    accessLogFile: /dev/stdout

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

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

文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。

测试访问日志

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

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

返回结果如下:

{
  "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日志:

kubectl logs -l app=sleep -c istio-proxy

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

{
     "authority": "httpbin:8000",
     "bytes_received": 0,
     "bytes_sent": 533,
     "connection_termination_details": null,
     "downstream_local_address": "172.24.146.239:8000",
     "downstream_remote_address": "172.24.158.25:49350",
     "duration": 3,
     "method": "GET",
     "path": "/headers",
     "protocol": "HTTP/1.1",
     "request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
     "requested_server_name": null,
     "response_code": 200,
     "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日志:

kubectl logs -l app=httpbin -c istio-proxy

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

{
     "authority": "httpbin:8000",
     "bytes_received": 0,
     "bytes_sent": 533,
     "connection_termination_details": null,
     "downstream_local_address": "172.24.158.96:80",
     "downstream_remote_address": "172.24.158.25:41812",
     "duration": 2,
     "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": 200,
     "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
}

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

文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。

刨析Envoy日志

名称 HTTP TCP
authority 请求授权头 未实现(“-”)
bytes_received 接收到消息体字节数 在连接上从下游接收的字节数
bytes_sent 发送的包体字节数 在连接上发送给下游的字节数
connection_termination_details 连接中断详情 连接中断详情
downstream_local_address 下游连接的本地地址 下游连接的本地地址
downstream_remote_address 下游连接的远程地址 下游连接的远程地址
duration 请求从起始时间到最后一个字节发出的持续总时长(以毫秒为单位) 下游连接的持续总时长(以毫秒为单位)
method HTTP请求方法 未实现(“-”)
path HTTP请求路径 未实现(“-”)
protocol 协议,目前不是 HTTP/1.1 就是 HTTP/2 未实现(“-”)
request_id 由envoy创建的 X-REQUEST-ID 请求头的值 未实现(“-”)
requested_server_name 设置在 ssl 连接套接字上表示服务器名称指示 (SNI) 的字符值 未实现(“-”)
response_code HTTP 响应码 未实现(“-”)
response_code_details TTP 响应状态码详情提供关于响应状态码的附加信息。 未实现(“-”)
response_flags 响应或者连接的附加详情 响应或者连接的附加详情
route_name 路由名 路由名
start_time 请求开始时间(包括毫秒) 下游连接开始时间(包括毫秒)
upstream_cluster 上游主机所属的上游集群 上游主机所属的上游集群
upstream_host 上游主机 URL 上游主机 URL
upstream_local_address 上游连接的本地地址 上游连接的本地地址
upstream_transport_failure_reason 如果上游因传输套接字而连接失败,从传输套接字中提供失败原因。 未实现(“-”)
user_agent User-Agent请求头的值 未实现(“-”)
x_forwarded_for X-Forwarded-For请求头的值 未实现(“-”)

清理

删除 httpbinsleep 服务:

kubectl delete -f samples/httpbin/httpbin.yaml
kubectl delete -f samples/sleep/sleep.yaml 

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

标签:kubectl,httpbin,Envoy,Istio,sleep,upstream,日志
From: https://www.cnblogs.com/heihaozi/p/17474045.html

相关文章

  • 大数据NiFi(十九):实时Json日志数据导入到Hive
    文章目录实时Json日志数据导入到Hive一、配置“TailFile”处理器1、创建“TailFile”处理器2、配置“PROPERTIES”二、配置“EvaluateJsonPath”处理器1、创建“EvaluateJsonPath”处理器2、配置“PROPERTIES”3、连接“TailFile”处理器和“EvaluateJsonPath”处理器三、配置“Rep......
  • [TSG开发日志2]串口通信?VS下FaroSDK编译环境?一文搞定
    艹,不知道为什么我之前写的法如sdk没有保存,总而言之就是莫名其妙整个工程没有了,后来我想了想,也有可能就是我自己删掉了,因为在配置法如工程的时候遇到了一些小问题,不过现在也解决了。一、关于串口通信:Qt的确有自己的串口通信类,就是QSerialPort,但是我们在使用过程中因为要更加定制......
  • 用日志记录Linux用户执行的每一条命令(history)
    工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器第一种方法第二种......
  • 1、istio工作原理
    Istio是一个开源的服务网格框架,它的主要功能是提供流量管理、安全策略和监控能力。而Pilot、Galley和Citadel则是Istio的三个组件,各自担任不同的角色:Pilot负责服务发现、负载均衡、流量路由和故障恢复等功能,同时也是整个网格中数据平面上的代理。Galley则是Istio配置系统的组件,它......
  • Day03学习日志
    Day03学习日志类型转换由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。运算中,不同类型的数据先转化为同一类型,然后进行运算。低->高顺序:byte,short,char->int->long->float->double注意:强制转换(类型)变量名高--低自动转换......
  • 2、istio部署
    官网:istio.io下载isitoctl客户端:cd/usr/local/src#下载curl-Lhttps://istio.io/downloadIstio|sh-#命令软链接ln-s/usr/local/istio-1.17.2/usr/local/istio#exportPATH="$PATH:/usr/local/istio/bin"istio目录是Istio控制面(ControlPlane)的安装目录,其中包......
  • Day02学习日志
    Day02学习日志写注释的几种方法单行注释//多行注释/**/文档注释/***/标识符和关键字注意大小写注意命名规则记住关键字数据类型基本数据类型整数类型byte:1个字节-128—127short:2个字节-32768—32767int:4个字节-2147483......
  • Python日志模块logging高级用法
    问题描述:为了监视程序运行过程,也为了在程序崩溃后进行事后分析来定位错误的原因和位置,不少程序员会在程序中适当的位置使用print()函数输出一些信息。这种方式虽然方便,但是难以实现输出内容的分级。一般建议使用日志模块logging来完成这一任务。在Python中有5个级别的日志,优先级从......
  • 踩坑日志
    最近一个小bug的修改差点让我怀疑起了String.split()是不是有问题。代码如下:publicstaticvoidmain(String[]args){Stringparam="2022.9";StringretDate="";String[]splitArr=param.split(".");retDate+=splitArr[0]+&qu......
  • 关于linux删除Tomcat中日志文件磁盘空间未释放解决方法
    linux内存不够我删了几个g的catalina.out用的是rm,结果发现磁盘空间未释放后来百度一下,原来要用清空命令才行echo"">catalina.out但是已经删掉了怎么办呢可以用lsof|grepdeleted命令查看没有正常删除的(如果没有这个命令可能没有安装这个工具,百度一下安装一下就好)再用......