gor 原来的 es 插件用的是比较旧的源了,最新也只是支持 es 5.x 版本,使用 --output-http-elasticsearch 的时候,如果连接 es6.x 以上的版本,数据是传不过来的。
鉴于我司的 elk 是 6.x 版本以及 gor 的 es 插件久无更新的情况下,那就还是自己动手改写一下。(新换的这个插件源,到 es 7.x 的连接方式都支持,我只适配了 6.x 版本)
项目源代码: shaonian-goreplay 【欢迎来 star ~】
新写的 gor 已经打包好成镜像了,同时把 INPUT OUTPUT 都暴露了出来,可以直接用 docker 的方式运行,可以单独去监听某个 docker 容器上暴露出的端口所经过的流量,不用在服务器的本地来跑。
goreplay-es6.x 镜像: docker pull shaonian/gor:6.x
具体的 Dockerfile:
FROM ubuntu:18.04
ADD goreplay /go/
WORKDIR /go
RUN mkdir logs
RUN mkdir records
USER root
ENV INPUT="--input-raw :5000"
ENV OUTPUT="--output-stdout"
CMD ./goreplay ${INPUT} ${OUTPUT}
这里的环境变量可以直接通过腾讯云容器服务的环境变量来配置:
想要监听哪个容器服务,就并行挂载在同个实例下面,设置好想要监听的 docker 容器暴露出端口,然后 goreplay 对应的日志就有内容输出了:
当然这样看日志太低效率了,可以使用 goreplay + kibana + es 的方式,将数据分隔呈现到 kibana 上。
本地演示了一下,直接用 docker-compose 的方式启动 kibana + es(6.x)版本:
goreplay 的 yml 文件可以这样写:
goreplay:
image: shaonian/gor:6.x
network_mode: host
environment:
INPUT: "--input-raw :5000"
# OUTPUT: "--output-stdout"
OUTPUT: "--output-stdout --output-http localhost:5000 --output-http-track-response --output-http-elasticsearch http://localhost:9200"
然后启动任意一个后端项目,暴露端口出 5000 即可开始监听。这里的 index 不需要提前设置,会自动以 gor-2020-01-01 这种方式来创建和更新。
然后观察一下效果:
如果是在腾讯云上面部署,使用 --output-http-elasticsearch 的时候,在同一个集群下可以通过 集群名 + 容器名 + 端口 的方式传递到 elk 中。
如果 elk 跟想要监听的容器不在同一个集群里面,可以通过 nginx 反向代理加密的方式,或者升级到 es 7.x 版本,可以免费使用数据加密传输的功能。
PS:技术交流 QQ 群 552643038