Dockerで建てたunboundにログの出力をさせてみる

## 目的
前回構築したunboundで、ログの出力をしてほしいという要望があった。
今回はログを出力させる方法を紹介する。

https://qiita.com/engishoma/items/a9b598393d299639f0ad

## 構築

### unbound.conf
以下を変更
```
    use-syslog: no
    log-queries: no
```

この様に変更する
```conf
        logfile: "/etc/unbound/log/unbound.log"
        use-syslog: no
        log-queries: yes
        log-time-ascii: yes
```

最終的に以下の様になった
```conf
server:
    # Send minimum amount of information to upstream servers to enhance
    # privacy. Only sends minimum required labels of the QNAME and sets
    # QTYPE to NS when possible.

    # See RFC 7816 "DNS Query Name Minimisation to Improve Privacy" for
    # details.

    # qname-minimisation: yes

    # allow local address
    access-control: 0.0.0.0/0 allow

    # listen interface
    interface: 0.0.0.0

    # hide version
    hide-version: yes
    hide-identity: yes


    logfile: "/etc/unbound/log/unbound.log"
    use-syslog: no
    log-queries: yes
    log-time-ascii: yes

    local-data: "www.tmcit.sho    IN A 172.24.20.25"
#    local-data: "fuga.example.com.    IN A 172.16.0.2"
#    local-data: "foo.example.com.     IN A 172.16.0.3"
#    local-data: "bar.example.com.     IN A 172.16.0.4"


#forward-zone:
#        name: "example.org."
#        forward-addr: 192.168.10.5

forward-zone:
        name: "."
        forward-addr: 8.8.8.8
        forward-addr: 8.8.4.4
        forward-addr: 172.24.2.51
```


### Dockerfile
docker-logはlogのローテーション設定ファイル
ログ系のフォルダやファイルはunboundが所有者にならないといけないので権限調整を行う
```dockerfile
FROM almalinux:latest
RUN yum -y update && yum -y install unbound
ADD unbound.conf /etc/unbound/
ENV TZ=Asia/Tokyo
ADD docker-log /etc/logrotate.d/

RUN mkdir -p /etc/unbound/log/
RUN chmod 777 /etc/unbound/log/ && \
chown unbound:unbound /etc/unbound/log/ && \
touch /etc/unbound/log/unbound.log && \
chmod 777 /etc/unbound/log/unbound.log && \
chown unbound:unbound /etc/unbound/log/unbound.log && \
chmod 644 /etc/logrotate.d/*

ENTRYPOINT ["/usr/sbin/unbound","-d","-c","/etc/unbound/unbound.conf"]
```

### ログローテーション
docker-log
```conf
/etc/unbound/log/unbound.log { # 対象のログファイル
    ifempty            # ログファイルが空でもローテーションする
    dateformat .%Y%m%d # dateフォーマットを任意のものに変更する
    missingok          # ログファイルがなくてもエラーを出さない
    compress           # 圧縮する
    rotate 10          # 10世代分古いログを残す
    postrotate         # ローテート後にsyslogを再起動
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
```


### docker-compose.yml
今回は事前に```docker volume create```コマンドを用いて、unboundボリュームを作成しているため、externalオプションをtrueにしている。ここを指定しなければdocker-composeが自動的にボリュームを作成する。

```yml
version: "3.9"
services:
  unbound:
    build: .
    image: unbound-alma:1.0.0
    container_name: unbound
    tty: true

    networks:
      vlan0:
        ipv4_address: 172.24.20.205
    volumes:
      - unbound:/etc/unbound/log/

networks:
  vlan0:
    name: vlan0
    driver: macvlan
    driver_opts:
      parent: enp1s0
    ipam:
      config:
        - subnet: 172.24.20.0/24
          gateway: 172.24.20.254

volumes:
  unbound:
    external: true
```




## ホストから確認
dockerのvolumeは```/var/lib/docker/volumes/```以下に格納されている。

/var/lib/docker/volumes/unbound/_data/unbound.log
```log
root@shoma:/home/shoma/dns# cat /var/lib/docker/volumes/unbound/_data/unbound.log
Jul 26 16:20:19 unbound[1:0] notice: init module 0: subnetcache
Jul 26 16:20:19 unbound[1:0] notice: init module 1: validator
Jul 26 16:20:19 unbound[1:0] notice: init module 2: iterator
Jul 26 16:20:19 unbound[1:0] info: start of service (unbound 1.16.2).
Jul 26 16:22:38 unbound[1:0] info: 172.24.20.16 205.20.24.172.in-addr.arpa. PTR IN
Jul 26 16:22:38 unbound[1:0] info: 172.24.20.16 google.com. A IN
Jul 26 16:22:40 unbound[1:0] info: 172.24.20.16 google.com. AAAA IN
Jul 26 16:22:52 unbound[1:0] info: 172.24.20.16 205.20.24.172.in-addr.arpa. PTR IN
Jul 26 16:22:52 unbound[1:0] info: 172.24.20.16 google.com. A IN
Jul 26 16:22:52 unbound[1:0] info: 172.24.20.16 google.com. AAAA IN
Jul 26 16:22:55 unbound[1:0] info: 172.24.20.16 205.20.24.172.in-addr.arpa. PTR IN
Jul 26 16:22:55 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. A IN
Jul 26 16:22:56 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. AAAA IN
Jul 26 16:22:56 unbound[1:0] info: 172.24.20.16 205.20.24.172.in-addr.arpa. PTR IN
Jul 26 16:22:56 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. A IN
Jul 26 16:22:56 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. AAAA IN
Jul 26 16:22:57 unbound[1:0] info: 172.24.20.16 205.20.24.172.in-addr.arpa. PTR IN
Jul 26 16:22:57 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. A IN
Jul 26 16:22:57 unbound[1:0] info: 172.24.20.16 www.tmcit.sho. AAAA IN
```