有一些服务,需要将日志打到UDP端口, 其实也可以打到本机的rsyslog服务,但是我的服务已经上容器了, 还不想没个容器都封装rsyslog服务,也不像挂载, 就想着把rsyslog封装成为一个服务发布。谁都可以调用。
那么问题来了, rsyslog将日志怎么处理,怎么区分?
- 我这是比较固定的日志格式, 不用做过多处理,
- rsyslog 将收到的日志,直接抓发到kafka上。本地不留数据。
- rsyslog启多个端口,通过端口来区别放到哪个kafka topic上。
- 也可以通过local级别来区分,我这里没做。
简单的是有 Dcokerfile
1 | FROM centos:7 |
这其中包括及个文件, 我就直接列出来了
rsyslog.conf 主要是开启514端口,TCP和UDP
1 | # rsyslog configuration file |
rsyslog 文件
1 | # Options for rsyslogd |
tokafka.conf 通过端口将日志写入到kakfa不同topic
1 | module(load="omkafka") |
其中 omkafka 模块参数说明,可以参考:
https://rsyslog.readthedocs.io/en/latest/configuration/modules/omkafka.html
For Example
1 | #加载omkafka和imfile模块 |
docker 镜像编译
1 | docker build -t rsyslog-to-kafka:latest . |
启动容器,还需要映射UDP端口
1 | docker run --name rsyslog-to -kafka -p 514:514 -p 514:514/udp -p 7510: 7510 -p 7510: 7510/udp -p 7511: 7511 -p 7511: 7511/udp -p 7512: 7512 -p 7512: 7512/udp rsyslog-to-kafka:latest |