在Istio中,到底怎么获取 Envoy 访问日志?
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 预定义了 TEXT 和 JSON 两种日志输出格式。默认使用 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请求头的值 |
未实现(“-”) |
清理
删除 httpbin 和 sleep 服务:
kubectl delete -f samples/httpbin/httpbin.yaml
kubectl delete -f samples/sleep/sleep.yaml
微信公众号:万猫学社
微信扫描二维码
关注后回复「电子书」
获取12本Java必读技术书籍

在Istio中,到底怎么获取 Envoy 访问日志?的更多相关文章
- SpringBoot应用中使用AOP记录接口访问日志
SpringBoot应用中使用AOP记录接口访问日志 本文主要讲述AOP在mall项目中的应用,通过在controller层建一个切面来实现接口访问的统一日志记录. AOP AOP为Aspect Or ...
- CentOS中设置Apache服务器网站访问日志[每天的日志]
在阿里云的linux 服务器下Apache的日志默认设置是七天更新一次, 并且所在的目录无法通过FTP浏览器查看, 这样让小白操作起来非常麻烦 可以使用rotatelogs来设置服务器的网站访问日志按 ...
- 利用html5中的localStorage获取网页被访问的次数
利用html5中的localStorage获取网页被访问的次数 <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 如何在 Istio 中支持 Dubbo、Thrift、Redis 以及任何七层协议?
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher管理委员,Istio 项目贡献者, Aerika 项目创建者 ,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发 ...
- Istio中的流量配置
Istio中的流量配置 目录 Istio中的流量配置 Istio注入的容器 Istio-init istio-proxy Envoy架构 Pilot-agent生成的初始配置文件 Envoy管理接口获 ...
- 在 Istio 中实现 Redis 集群的数据分片、读写分离和流量镜像
Redis 是一个高性能的 key-value 存储系统,被广泛用于微服务架构中.如果我们想要使用 Redis 集群模式提供的高级特性,则需要对客户端代码进行改动,这带来了应用升级和维护的一些困难.利 ...
- Istio 中实现客户端源 IP 的保持
作者 尹烨,腾讯专家工程师, 腾讯云 TCM 产品负责人.在 K8s.Service Mesh 等方面有多年的实践经验. 导语 对于很多后端服务业务,我们都希望得到客户端源 IP.云上的负载均衡器,比 ...
- Abp项目中的领域模型实体类访问仓储的方法
首先声明,不推荐使用这种方法.实体访问仓储是不被推荐的! 1.简单粗暴的方法 Abp.Dependency.IocManager.Instance.Resolve>(); 2.绕个弯子的方法 首 ...
- Linux分析日志获取最多访问的前10个IP
原文地址:http://xuqq999.blog.51cto.com/3357083/774714 apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问 ...
- Spring拦截器中通过request获取到该请求对应Controller中的method对象
背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...
随机推荐
- 常用注解-SpringBoot请求
SpringBoot请求 常用注解及作用范围: @Controller :[类]需要返回一个视图(themleaf),加注解4@ResponseBody等于注解2 @RestController:[类 ...
- 浅学git工具
1.git工具介绍及使用 git工具直接安装: 直接运行exe文件进行安装,按默认的操作点击下一步就行了 校验: 在DOS命令行中输入:git --version 如果能正常显示出对应的版本就是ok ...
- pywin32获取键盘状态,附带键位码
import win32apiimport win32con win32con.VK_CAPITAL # 20获取Caps Lock键编码 win32api.GetKeyState(win32con. ...
- Java内部类的使用介绍详解
前言 在之前讲解static静态内部类时,就给大家简单说过内部类的概念.但实际上,内部类并不是那么简单,所以今天我们需要对内部类进行专门地讲解和学习. 全文大约 [6500]字,不说废话,只讲可以让你 ...
- win10 双开微信 微信双开
方法1:鼠标连续点击实现Windows微信双开在桌面上找到微信图标,鼠标左键连续点击2次为打开一个微信,连续点击8次就打开了4个微信. 注意:不要连续点开太多防止卡顿. 方法2:回车键双击微信图标实现 ...
- flume组件以及通过命令监控大数据平台转态
实验一.Flume 组件安装配置 1.下载和解压 Flume 可 以 从 官 网 下 载 Flume 组 件 安 装 包 , 下 载 地 址 如 下 URL 链 接 所 示 https://archi ...
- C语言跳转浏览器打开指定URL
#include <stdlib.h> int main() { // 定义要打开的URL char* url = "https://rjku.gitee.io/"; ...
- html/css 添加图片
通过img.src添加图片 添加一个img元素,设置content,会发现在IE.safari等浏览器内显示为空白. 一般我们使用img,是通过src来设置的,可以通过react的import图片添加 ...
- ES6必会重点汇总
当下的前端开发已经成为一项非常流行的技能.在这个领域中,ES6是一个重要的主题.ES6是ECMAScript 2015的缩写,是JavaScript语言的下一个版本,引入了很多新的语言特性和API,让 ...
- python介绍、32位与64位系统的区别、python安装、pip管理安装包
一.python的介绍 * python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...