如何让fail2ban读取json docker日志

Posted

技术标签:

【中文标题】如何让fail2ban读取json docker日志【英文标题】:how to make fail2ban read json docker logs 【发布时间】:2016-07-10 21:34:07 【问题描述】:

是否可以配置我的 fail2ban jail.conf 来检查 docker 日志,而不是在主机中挂载日志。例如将 logpath 设置为容器的日志路径。

Jail.conf:

...
#example
[nginx-http-auth]
    enabled = true
    filter  = nginx-http-auth
    port    = http,https
    logpath = /var/lib/docker/containers/819564257d4*/*e0923e-json.log
...

但这并没有多大作用,因为docker logs命令和日志文件有一点区别:

# docker logs @nginx_container_name 

2016/03/23 12:39:52 [错误] 6#6: *350​​ 上游过早关闭 从上游读取响应标头时连接,客户端: @ATTACKER_IP,服务器:@MY_DNS,请求:“GET /Blog/wp-login.php HTTP/1.1”,上游:“http://172.17.0.3:8001/Blog/wp-login.php”,主机: “@MY_IP:80” @ATTACKER_IP - - [23/Mar/2016:12:39:52 +0000] "GET /Blog/wp-login.php HTTP/1.1" 502 173 "-" "Python-urllib/ 2.7"

# cat /var/lib/docker/containers/819564257d4*/*e0923e-json.log

"log":"2016/03/23 12:39:52 [error] 6#6: *350​​ 上游提前关闭连接,同时从上游读取响应头,客户端:@ATTACKER_IP ,服务器:@MY_DNS,请求:\"GET /Blog/wp-login.php HTTP/1.1\",上游:\"http://172.17.0.3:8001/Blog/wp-login.php\",主机:\"@ MY_IP:80\"\n","stream":"stdout","time":"2016-03-23T12:39:52.219982304Z" "log":"@ATTACKER_IP - - [23/Mar/2016:12:39:52 +0000] \"GET /Blog/wp-login.php HTTP/1.1\" 502 173 \"-\" \"Python-urllib/2.7\"\n","stream":"stdout","time":"2016-03-23T12:39:52.421767592Z"

我准确地将日志文件挂载到主机中,我知道这很愚蠢,所以我的问题是:

有什么办法可以让rsyslog读取json日志文件 docker nginx 容器 如果没有,如何配置docker制作syslog日志格式 如果不是,如何在容器上配置系统日志以通过 记录到我的主机?

谢谢!

【问题讨论】:

【参考方案1】:

您可以配置一个容器将日志发送到 syslog,请参阅https://docs.docker.com/engine/admin/logging/overview/

【讨论】:

我实际上是在使用 docker-compose 运行我的容器,文档有点模棱两可,但谢谢 :)【参考方案2】:

您还可以更改 nginx-http-auth 守护程序的 fail2ban 正则表达式规则。 正则表达式规则在此文件夹中:

/etc/fail2ban/filter.d

【讨论】:

以上是关于如何让fail2ban读取json docker日志的主要内容,如果未能解决你的问题,请参考以下文章

gcloud auth configure-docker 失败(config.json 无法读取为 JSON)

Docker配置文件daemon.json解析

fail2ban和joomla错误日志匹配问题

无法在 docker 容器内以非阻塞方式读取类路径资源文件

让我们畅通无阻:在 Scala 中使用 GSON 读取 Json

从 json 文件(php)登录检查用户和密码。如何从json文件中读取文件