前言
本節詳細聊一下基於envoy的可觀測性
日誌
首先是日誌,配置日誌的方式也很簡單
static_resources:
listeners:
- name: ingress_listener
address:
socket_address:
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
...
access_log:
- name: envoy.access_loggers.stdout
typed_config:
"@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
log_format:
text_format: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %BYTES_SENT% %DURATION% %REQ(X-REQUEST-ID)% \"%REQ(USER-AGENT)%\" \"%REQ(X-FORWARDED-FOR)%\" %UPSTREAM_HOST% %UPSTREAM_CLUSTER% %RESPONSE_FLAGS%\n"
- 該配置是將日誌輸出在控制枱,也可以直接輸出為文件,然後通過工具採集走
path: /var/log/envoy/access.log - 也可以直接將日誌輸出至kafka,並且按比例採集、只採集4xx、5xx等都可以配置,這裏就不在贅述了
admin管理頁面
envoy有默認的admin頁面,方便查看統計信息、打開某些功能的開關等
admin:
address:
socket_address:
address: 0.0.0.0
port_value: 9901
打開9901頁面:

可以查看相關的統計信息、也可以打開某些開關,功能還是很豐富的
merics接入prometheus
打開了admin之後,就默認提供了相關的prometheus stats http://10.105.148.194:9901/stats/prometheus
這時只需在k8s集羣外弄一個prometheus,並且採集該envoy即可
prometheus.yml
global:
scrape_interval: 5s
evaluation_interval: 5s
rule_files:
- /etc/prometheus/*.rules
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: "envoy"
metrics_path: /stats/prometheus
static_configs:
- targets: ["10.105.148.194:9901"]
docker run -d --name prometheus \
-p 9090:9090 \
-v ./prometheus.yml:/etc/prometheus/prometheus.yml \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
registry.cn-beijing.aliyuncs.com/wilsonchai/prometheus:v3.5.0
traces接入jaeger
jaeger的安裝可以參考這裏: opentelemetry全鏈路初探--埋點與jaeger
jaeger啓動之後,改造一下envoy的配置,這裏要特別注意,不同版本的配置不一樣,我這裏envoy的版本是:v1.32
static_resources:
listeners:
- name: ingress_listener
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
...
tracing:
provider:
name: envoy.tracers.opentelemetry
typed_config:
"@type": type.googleapis.com/envoy.config.trace.v3.OpenTelemetryConfig
service_name: envoy-proxy
grpc_service:
envoy_grpc:
cluster_name: jaeger_otlp_collector
...
clusters:
...
- name: jaeger_otlp_collector
type: LOGICAL_DNS
connect_timeout: 5s
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: jaeger_otlp_collector
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 10.22.12.178
port_value: 4317
...
修改完成之後重啓下envoy
jaeger成功接收到了來自envoy的trace


由於只在envoy配置了trace,沒有和後端服務聯動,所有隻顯示了envoy這一段的trace信息,如果要聯動後端,可以參考這個系列的文章: 全鏈路監控配置
小結
至此,logs、metrics、traces三大可觀測的指標建設完成,envoy可觀測性的建設也結束了
聯繫我
- 聯繫我,做深入的交流

至此,本文結束
在下才疏學淺,有撒湯漏水的,請各位不吝賜教...