如何使fail2ban读取json docker日志

是否可以configuration我的fail2ban jail.conf来检查docker日志而不是挂载主机上的日志。 例如将日志path设置为容器日志的path。

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 [error] 6#6:* 350上游过早closures连接,同时读取来自上游的响应头,客户端: @ 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上游过早closures连接,同时从上游读取响应头,客户端: @ 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读取docker nginx容器的json日志文件
  • 如果没有,如何configurationdocker使一个系统日志日志格式
  • 如果没有,如何configuration系统日志的容器为了传递日志到我的主机?

谢谢 !

您可以configuration容器将日志发送到系统日志,请参阅https://docs.docker.com/engine/admin/logging/overview/

您还可以更改nginx-http-auth守护进程的fail2ban正则expression式规则。 正则expression式规则在这个文件夹中:

 /etc/fail2ban/filter.d