Envoy Proxy使用介绍教程(六):envoy一些简单功能/基础配置的使用方法

作者: 李佶澳   转载请保留:原文地址   更新时间:2019-02-12 16:13:52 +0800

说明

TODO:

  • admin接口
  • file system flags
  • runtime使用
  • 看门狗设置
  • 监控数据采集
  • cds
  • lds
  • rds
  • eds
  • sds
  • hds
  • ads
  • listenerfilter使用
  • filter使用
  • http_filter使用
  • rate limit service 对接
  • zipkin对接
  • cluster manager 用途研究

动态配置的使用,即xDS的用法,见Envoy Proxy使用介绍教程(七):envoy动态配置xDS的使用方法

该系列所有笔记可以在系列教程汇总中找到。

《Envoy Proxy使用介绍教程(一):新型L3~L7层访问代理软件Envoy的使用》

《Envoy Proxy使用介绍教程(二):envoy源代码阅读、集成开发环境(IDE)》

《Envoy Proxy使用介绍教程(三):envoy设计思路、配置文件和功能特性概览》

《Envoy Proxy使用介绍教程(四):envoy源代码走读&启动过程分析》

《Envoy Proxy使用介绍教程(五):envoy的配置文件完全展开介绍》

《Envoy Proxy使用介绍教程(六):envoy一些简单功能/基础配置的使用方法》

《Envoy Proxy使用介绍教程(七):envoy动态配置xDS的使用方法》

《Envoy Proxy使用介绍教程(八):envoy动态配置-聚合发现ADS的使用方法》

《Envoy Proxy使用介绍教程(九):envoy的应用方法与使用约束》

都是边学习边记录的,时间比较紧,难免有些地方记录的比较粗糙,查看更多相关内容

admin接口

admin配置的完整定义见:admin – 管理接口

下面是一个yaml格式的例子:

admin:
  access_log_path: /tmp/admin_access.log
  profile_path: /var/log/envoy/envoy.prof
  address:
    socket_address:
      protocol: TCP
      address: 0.0.0.0
      port_value: 9901

打开http://127.0.0.1:9901,就可以看到envoy的当前状态。

File system flags

Envoy支持File system flags,这个功能使envoy启动前后的一些参数不变。

File system flags中目前只有drain,文档介绍说如果这个文件存在,Envoy就以HC failing mode的模式启动。

我对这个功能的理解是,它类似内核参数,内核参数可以通过/proc目录下的文件进行修改,envoy似乎也在学习这种方式,现在只有drain一个文件可用(2019-01-24 23:27:32)。

flags_path指定参数目录,例如:

flags_path: /etc/envoy/flags/

Envoy启动的时候会显示这样一条日志:

[2018-12-28 14:12:33.663][8980][info][main] source/server/server.cc:377] server flags path: /etc/envoy/flags/

/etc/envoy/flags目录中创建drain文件:

mkdir -p  /etc/envoy/flags/
touch /etc/envoy/flags/drain

重启envoy的时候会多出一条日志,in drain mode

[2018-12-28 14:17:18.293][9032][info][main] source/server/server.cc:377] server flags path: /etc/envoy/flags/
[2018-12-28 14:17:18.293][9032][info][main] source/server/server.cc:379] starting server in drain mode

runtime

目前还不清楚,runtime中的数据和envoy的工作过程有什么关系。2018-12-28 17:35:29

runtime将指定目录中所有文件的内容加载,通过admin的/runtime接口暴露出来,并且可以通过runtime_modify修改。

文件目录一般按照版本命名:

mkdir v1 v2

用符号链接指向当前正在用的目录:

ln -s `pwd`/v1 /srv/runtime/current

在envoy中的配置如下:

runtime:
  symlink_root: /srv/runtime/current
  subdirectory: envoy
  override_subdirectory: envoy_override

subdirectory指定要加载的子目录。override_subdirectory指定的目录中与--service-cluster指定的cluster同名的子目录中的文件内容,会覆盖在其它流程中的读取的数值。(是不是很拗口?最近折腾了几周kubernetes,回头看到这句话,我也很蒙…. 2019-01-24 23:33:57)

mkdir v1/envoy
mkdir v1/envoy_override
mkdir v1/envoy/health_check/
echo "10" > v1/envoy/health_check/min_interval

然后在ENVOY_IP:9901/runtime中会看到下面的内容:

{
  "layers": [
      "root",
      "admin"
  ],
  "entries": {
      "health_check.min_interval": {
          "layer_values": [
              "10",
              ""
          ],
          "final_value": "10"
      }
  }
}

health_check.min_interval的值就是envoy/health_check/min_interval文件的内容。

可以用下面的方式修改值:

curl -X POST "10.10.64.58:9901/runtime_modify?health_check.min_interval=20"

注意修改后,文件的内容不会被修改, 而在runtime中看到的是多了一层:

{
  "layers": [
      "root",
      "admin"
  ],
  "entries": {
      "health_check.min_interval": {
          "layer_values": [
              "10",
              "20"
          ],
          "final_value": "20"
      }
  }
}

通过runtime_modify修改的数值只记录在envoy中,覆盖了envoy从文件中读取的数值,文件的内容是不变的。

设置看门狗(watchdog)

Watchdog的作用是:在envoy僵死时,自动将envoy进程杀死,watchdog – 看门狗设置

watchdog:
  miss_timeout: 0.2s
  megamiss_timeout: 1s
  kill_timeout: 0s
  multikill_timeout: 0s

*kill_timeout的值为0,表示不杀死envoy继承。

状态数据输出

通过envoy admin的/stats/prometheus接口,可以获得prometheus格式的状态数据,感觉有这个功能就足够了。stats_sinks或许是为了支持prometheus之外的监控系统。

状态数据有多种输出方式,在stats_sinks中配置。

stats_flush_interval配置状态数据输出的频率。

stats_config是状态数据相关的配置。

输出到hystrix-dashboard

hystrix-dashboard中没有展示出数据,原因不明。2018-12-28 16:13:13

docker run -d -p 8080:9002 --name hystrix-dashboard mlabouardy/hystrix-dashboard:latest

Web的地址是http://127.0.0.1:8080/hystrix

配置envoy:

stats_sinks:
  name: envoy.stat_sinks.hystrix
  config:
    num_buckets: 10

将envoy重启后,将http://ENVOY_IP:9901/hystrix_event_stream填入到hystric的页面中,即可查看envoy 的状态。

输出到statsd

未完成 2018-12-28 16:13:27

statsd安装方法:

yum install -y nodejs
git clone https://github.com/etsy/statsd.git
cd statsd
node stats.js exampleConfig.js

参考

  1. envoy v2 API reference

本文原创首发于网站:www.lijiaocn.com

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作 友情链接: lijiaocn github.com