前言
本节详细聊一下基于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可观测性的建设也结束了
联系我
- 联系我,做深入的交流
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...