这篇笔记比较老,不再更新维护,请移步最新的手册:envoy相关笔记。
TODO:
动态配置的使用,即xDS的用法,见Envoy Proxy使用介绍教程(七):envoy动态配置xDS的使用方法
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的当前状态。
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中的数据和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的作用是:在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中没有展示出数据,原因不明。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 的状态。
未完成 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