LogServer
跑 ubuntu server , 預計佈署 rsyslog server 收計 AP 送來的Log資料。
AppServer
透過 Docker 佈署的 Net Core 網站或跑其他應用程式,預計將 Docker 相關的 Log 轉送到上面的 LogServer。
ubuntu server 預設就有安裝 rsyslog 套件了,不過如果要支援 tls 傳輸的話需要在多裝一個套件。
apt install rsyslog-gnutls
這個動作 LogServer 跟 AppServer 都要安裝。
產生相關憑證
EriCaRoot.crt
LogCert.crt
(憑證), LogPrivkey.key
(私鑰)AppCert.crt
(憑證), AppPrivkey.key
(私鑰)佈署憑證檔案
這邊把憑證相關檔案都放到 /etc/rsyslog.d/tls
下面,後續設定檔會需要指定憑證的完整路徑,所以這路徑只是我喜歡放這邊,不是一定要放這邊,佈署完成後兩個主機上的狀況太概會是。(檔案權限都設定為 644)
EriCaRoot.crt
、 LogCert.crt
、 LogPrivkey.key
EriCaRoot.crt
、 AppCert.crt
、 AppPrivkey.key
LogServer 部分
AppServer 部分
重啟 rsyslog 服務
docker 沒特別設定預設啟動 container 時,Log是會送到本地的 json,每個 container 各自立的資料,位置在 /var/lib/docker/containers/...
下面,可以透過設定 /etc/docker/daemon.json
把所有的 log 都送往本地的 rsyslog 處理。設定範例如下:
調整後透過 systemctl restart docker.service
讓設定生效。
這邊注意調整過 daemon.json
影響的只有調整後啟動的容器,之前啟動的 Log 還是維持在 json 模式,需要把容器銷毀重啟才會改用新的設定。如果是用 docker-compose.yaml 啟動的容器,處理上就很簡單,先 down 在 up 就搞定了。
docker compose down && docker compose up -d
完成上面設定後 AppServer , 所有的 Docker Container 的 Log 應該就都會往本機 rsyslog 發送然後寫入 /var/log/docker.log 裡面了。然後再轉送到 LogServer 的 /var/log/clients/…下面,但預設 log檔會一直長大,這時候就需要另外一個機制日誌輪替(logrotate),這大部分的 Linux 發行版預設都有安裝了,我們只要調整設定讓他多去處理我們新增的日誌檔案目標就好。
/etc/logrotate.d/rsyslog
加入 /var/log/clients/*.log
/etc/logrotate.d/rsyslog
加入 /var/log/docker.log
/etc/logrotate.d/rsyslog
預設是一週切一個檔案(weekly)保留4份(rotate 4),大約就保留一個月左右的紀錄量。如果要改變保留份數或
改變切割方式例如要一天切一個,用日期當檔名,設定的內容可能就會變成。