目的
NOCのタスクで、DNSクエリログの可視化をする必要が出来た。今回は、Kibanaで言うところのtagcloudの様な可視化をGrafana pluginのWordcloudを用いる事でpromtheusスタックでtagcloud環境を実装する。
システム概要図
設定
送信側
Unboundの設定
Rsyslogの設定
受信側
docker-compose
docker-compose.yml
version: '3'
services:
grafana:
# image: grafana/grafana:latest
build: ./grafana
container_name: grafana
hostname: grafana
ports:
- 3000:3000
user: "$PID:$GID"
volumes:
- ./grafana:/var/lib/grafana
rsyslog:
build: ./syslog
container_name: rsyslog
ports:
- 514:514
volumes:
- ./syslog/log/:/var/log/
privileged: true
loki:
image: grafana/loki:latest
container_name: loki
ports:
- 3100:3100
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:2.7.5
volumes:
- /var/log:/var/log
- ./promtail/config.yml:/etc/promtail/config.yml
- ./syslog/log/syslog:/etc/syslog
command: -config.file=/etc/promtail/config.yml
container_name: promtail
ports:
- 9080:9080
restart: always
Dockerfile
grafana
FROM grafana/grafana
RUN grafana-cli plugins install magnesium-wordcloud-panel
rsyslog
FROM shomaigu/ubuntu-base:latest
RUN apt -y install rsyslog
ADD ./rsyslog.conf /etc/rsyslog.conf
RUN touch /var/log/syslog
RUN chmod 777 /var/log/syslog
ENTRYPOINT ["/usr/sbin/rsyslogd", "-n", "-iNONE"]
各サービスのconfig
rsyslog
rsyslog.conf
# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
#module(load="immark") # provides --MARK-- message capability
# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")
###########################
#### GLOBAL DIRECTIVES ####
###########################
#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Filter duplicated messages
$RepeatedMsgReduction on
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
#$PrivDropToUser syslog
#$PrivDropToGroup syslog
$PrivDropToUser root
$PrivDropToGroup root
#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
promtail
config.yml
server:
# 9080 ポートで HTTP でリッスンする
# ブラウザで開くとログのディスカバリの状態が見れます
http_listen_port: 9080
# grpc のリッスンポート、0 ならランダムに決定される・・・これなにに使っている の?
grpc_listen_port: 0
clients:
# Loki の URL を指定
- url: http://loki:3100/loki/api/v1/push
# ログのディスカバリの設定
scrape_configs:
# Apache のアクセスログを収集
- job_name: access_log
static_configs:
- targets:
# targets は localhost または自ホスト名のどちらかを指定する必要がある
# とドキュメントに書いてた気がするけど何でも通る? というかこれ指定で きる意味あるの?
- localhost
labels:
# __path__ ラベルでファイル名を指定する、ワイルドカードも指定可能
__path__: /etc/syslog
Grafana上で、データソースにLokiを選択し、wordcloudの選択後、CountfieldにTimeと入力し、クエリを実行すると