Agent Config

介绍

Agent Config 是用来决定 Agent 行为的配置,一般会保存在 /etc/eru/agent.yaml 也可以通过 agent --config 来指定。一个标准的 agent 配置如下:

pid: /tmp/agent.pid                              pid path
store: grpc                             optional store 的类型,默认为 grpc,即 eru-core 的 grpc 服务
runtime: docker                         optional runtime 类型,默认为 docker
kv: etcd                                optional kv 类型,默认为 ETCD

core:                                            Core 的 API 地址
  - 127.0.0.1:5001                               可以配置多个地址

healthcheck:                                     Health Check 配置
  interval: 120                         optional Health Check 间隔
  timeout: 10                           optional Health Check 超时判定
  cache_ttl: 300                        optional 本地缓存的过期时间,仅当 enable_selfmon 为 true 时生效
  enable_selfmon: false                 optional 集群里是否启动了 selfmon

auth:                                   optional Core API Basic auth
  username: username
  password: password

docker:                                          Docker 配置
  endpoint: unix:///var/run/docker.sock          Docker url,支持 unix socket file 地址和 tcp 地址的形式

yavirt:                                          Yavirt 配置
  endpoint: grpc://127.0.0.1:9697                Yavirt url,支持 grpc 地址和 http 地址
  skip_guest_report_regexps:                     ID 符合任意正则表达式的 VM 将不会被检查
    - .+002

metrics:                                         Metrics 配置
  step: 30                                       发送间隔
  transfers:                            optional 默认支持 prometheus,也可以开启 statsd
    - 127.0.0.1:8125                             可以配置多个 statsd 后端

api:                                    optional profile API 配置
  addr: 127.0.0.1:12345                          profile API 地址

log:                                             日志选项
  forwards:
    - tcp://127.0.0.1:5144              optional 日志远端, 支持 tcp、udp、journal 和特殊的 __discard__
  stdout: False                                  是否把容器日志打到 agent 自身日志流里面

ha_keepalive_interval: 16s              optional selfmon 发送心跳的时间间隔

etcd:                                            ETCD 配置,仅当此 agent 以 selfmon 模式运行时生效
  machines:                                      ETCD 服务器地址
    - 127.0.0.1:2379
  prefix: /agent-selfmon                         Key的前缀

Agent 在监听到隶属 Eru 的容器启动后,会把 stdout/stderr 的日志 forward 到配置的远端,同时开始监听 metrics。

对于日志,格式如下:

{"id":"{CONTAINER_ID}","name":"{APP_NAME}","type":"{stderr || stdout}","entrypoint":"{APP_ENTRYPOINT}","ident":"{APP_IDENT}","data":"{LOG_MSG}","datetime":"2018-06-27 07:19:25.507018","extra":{CONTAINER_LABELS}}

在测试的时候甚至可以用 netcat 来模拟日志接收,使用

nc -l {PORT} -k

需要注意的是,log 参数支持 tcp 和 udp 2种形式,udp 对于单条日志大小限制为了1024K,因此对于线上系统而言,建议使用 TCP 模式。

对于 Metrics,Agent 会发一组数据到配置的远端 statsd 中:

eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cpu_usage:0.06814310051085702|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cpu_user_usage:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cpu_sys_usage:40.00000000003638|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.mem_rss:6184960|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.mem_usage:2088960|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.mem_max_usage:2215936|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.mem_usage_percent:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.drop.in:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.drop.out:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.err.in:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.err.out:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.bytes.recv:10445.6|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.bytes.sent:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.packets.recv:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.lo.packets.sent:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.drop.in:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.drop.out:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.err.in:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.err.out:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.bytes.recv:5191.333333333333|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.bytes.sent:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.packets.recv:0|g
eru.{APPNAME}.{TAG}.{ENTRYPOINT}.{HOST}.{CONTAINER_ID}.cali0.packets.sent:0|g

通过这个数据我们就可以从容器外面监控容器行为。

如果没有开启 statsd,也可以通过 API_HOST:PORT/metrics 拿到 prometheus 规格的 metrics。

Last updated