おれさまラボ

実際に手を動かして理解を深めるブログ。

Squid のアクセスログをリモート先の td-agent で受信する

■ 環境
OSは、CentOS7.6 を利用しています。
[root@fluentd1 ~]# cat /etc/*release
CentOS Linux release 7.6.1810 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
BUG_REPORT_URL="https://bugs.centos.org/"
 
 
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
 
 
CentOS Linux release 7.6.1810 (Core)
CentOS Linux release 7.6.1810 (Core)
 
td-agent は、0.12.43 を使用しています。
[root@fluentd1 ~]# td-agent --version
td-agent 0.12.43
 
■ 手順
 
fluentdサーバ上の /etc/td-agent/td-agent.conf に以下を追記します。
<source>
  @type syslog
  port 514
  bind 0.0.0.0
  tag local0
</source>
 
 
<match local0.**>
  @type file
  path /var/log/td-agent/squid-td
</match>
 
td-agent を再起動します。
[root@fluentd1 ~]# systemctl restart td-agent
 
ログを確認し、514ポートがバインドされたことを確認します。併せて、その他のエラーがでていないことも確認します。ここでうまくいかない場合は、rsyslogが起動していないか確認してください。起動していた場合は、停止/disable してください。
[root@fluentd1 ~]# tail -f /var/log/td-agent/td-agent.log
  </source>
  <match local0.**>
    @type file
    path /var/log/td-agent/squid-td
    buffer_path /var/log/td-agent/squid-td.*
  </match>
</ROOT>
2019-03-09 11:34:57 +0900 [info]: listening fluent socket on 0.0.0.0:24224
2019-03-09 11:34:57 +0900 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine"
2019-03-09 11:34:57 +0900 [info]: listening syslog socket on 0.0.0.0:514 with udp
 
Squidサーバで、rsyslogの設定を編集します。
# Save squid access log
local0.*                                                /var/log/squid/access.log
 
 
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
local0.* @192.168.1.114:514
# ### end of the forwarding rule ###
 
何らかの方法で、Squid 経由でのWEBアクセスを発生させます。今回は、curl を使ってローカルに立てているWebサーバーへ アクセスさせました。
 
td-agentサーバーで、tcpdump を使ってsyslogが飛んできていることを確認します。
[root@fluentd1 ~]# tcpdump -s0 -i any dst port 514 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:48:00.918113 IP 192.168.1.124.46610 > 192.168.1.114.syslog: SYSLOG local0.info, length: 167
11:48:03.167586 IP 192.168.1.124.46610 > 192.168.1.114.syslog: SYSLOG local0.info, length: 186
 
td-agentサーバーで、JSON形式のログが記録されていることを確認します。
2019-03-09T11:48:00+09:00       local0.local0.info      {"host":"proxy1","ident":"(squid-1)","message":"127.0.0.1 - - [09/Mar/2019:11:48:00 +0900] \"GET cache_object://localhost:8080/info HTTP/1.0\" 200 2640 \"-\" \"-\" TCP_MISS:HIER_NONE"}
2019-03-09T11:48:03+09:00       local0.local0.info      {"host":"proxy1","ident":"(squid-1)","message":"192.168.1.123 - - [09/Mar/2019:11:48:03 +0900] \"GET http://192.168.1.121/dummy.iso HTTP/1.1\" 200 10737418680 \"-\" \"curl/7.29.0\" TCP_MISS:HIER_DIRECT"}
 
以上です。