博客 / 詳情

返回

Envoy 可觀測性實戰:日誌、指標與鏈路追蹤的完整落地

前言

本節詳細聊一下基於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頁面:

watermarked-envoy_ob_1

可以查看相關的統計信息、也可以打開某些開關,功能還是很豐富的

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

watermarked-envoy_ob_2

watermarked-envoy_ob_3

由於只在envoy配置了trace,沒有和後端服務聯動,所有隻顯示了envoy這一段的trace信息,如果要聯動後端,可以參考這個系列的文章: 全鏈路監控配置

小結

至此,logs、metrics、traces三大可觀測的指標建設完成,envoy可觀測性的建設也結束了

聯繫我

  • 聯繫我,做深入的交流


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

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.