SyslogをGraylog[OpenSearch]で整形する
(docker-compose使用)
OpenSearchを使用したGrayLogサーバーの立て方です。
環境
項目 | 環境 |
---|---|
OS | Windows 11 |
VM | Ubuntu 22.04.3 LTS |
Docker | 24.0.7 |
docker-compose | 1.29.2 |
Graylog | 5.1.5 |
OpenSearch | 2.4.0 |
Mongo DB | 5.0 |
注意点
- SyslogはUbuntuの1514に対してログを送信できていることが前提となります。
- 設定ファイル内に「ElasticSearch」という単語が出てくることがありますが、これはGraylog側が設定名称を変更していない為と思われます。今回は「OpenSearch」を使用しています。
- EC2に無料枠で立てるとメモリエラーが発生します。
- CPUがAVXに対応していないとMongoDB5.0が使えないため、うまくいきません。
⇒opensearchかgraylogのどちらかが確か5.0をシステム要件として要求しています。
作成
準備
- docker-composeで作成していきます。
Dockerとdocker-composeのインストール
アップデート
sudo apt update
必要な依存関係をインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common pwgen -y
Dockerのインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y
docker version
sudo systemctl status docker
docker-composeのインストール
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
- 必要に応じて作業ディレクトリを作成してください
mkdir graylog && cd graylog
目次
-
.env
ファイルを作成 -
docker-compose.yml
ファイルを作成 - docker-composeの起動
.envファイルを作成する
GRAYLOG_PASSWORD_SECRETを作成
pwgen -N 1 -s 96
出力された文字列をメモしてください
GRAYLOG_ROOT_PASSWORD_SHA2を作成
※<yourPassword>
を自分のパスワードに置き換えてください
echo -n <yourPassword> | shasum -a 256
出力された文字列をメモしてください
vim .env
などでファイルを作成し、以下の内容を貼り付けてください
GRAYLOG_PASSWORD_SECRET
とGRAYLOG_ROOT_PASSWORD_SHA2
の""内に先程メモした文字列を入力してください。
※ここで間違えると起動時にエラーのループ?が起こるみたいなので、気を付けてください。(間違えたら作業フォルダ毎削除したら大丈夫だと思います。)
# You MUST set a secret to secure/pepper the stored user passwords here. Use at least 64 characters.
# Generate one by using for example: pwgen -N 1 -s 96
# ATTENTION: This value must be the same on all Graylog nodes in the cluster.
# Changing this value after installation will render all user sessions and encrypted values in the database invalid. (e.g. encrypted access tokens)
GRAYLOG_PASSWORD_SECRET=""
# You MUST specify a hash password for the root user (which you only need to initially set up the
# system and in case you lose connectivity to your authentication backend)
# This password cannot be changed using the API or via the web interface. If you need to change it,
# modify it in this file.
# Create one by using for example: echo -n yourpassword | shasum -a 256
# and put the resulting hash value into the following line
# CHANGE THIS!
GRAYLOG_ROOT_PASSWORD_SHA2=""
processbuffer_processors = 8
outputbuffer_processors = 3
processor_wait_strategy = blocking
ring_size = 65536
inputbuffer_ring_size = 65536
inputbuffer_processors = 2
inputbuffer_wait_strategy = blocking
message_journal_max_age = 12h
elasticsearch_max_time_per_index = 3d
retention_strategy = delete
docker-compose.yamlファイルを作成する
vim docker-compose.yaml
などでファイルを作成し、以下の内容を貼り付けてください
※受信ポートを変更する場合はports:
の# Syslog
部分を変更してください。(今回は1514)
version: "3.8"
services:
mongodb:
image: "mongo:5.0"
volumes:
- "mongodb_data:/data/db"
restart: "on-failure"
opensearch:
image: "opensearchproject/opensearch:2.4.0"
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "action.auto_create_index=false"
- "plugins.security.ssl.http.enabled=false"
- "plugins.security.disabled=true"
ulimits:
memlock:
hard: -1
soft: -1
nofile:
soft: 65536
hard: 65536
volumes:
- "os_data:/usr/share/opensearch/data"
restart: "on-failure"
graylog:
hostname: "server"
image: "${GRAYLOG_IMAGE:-graylog/graylog:5.1.5}"
depends_on:
opensearch:
condition: "service_started"
mongodb:
condition: "service_started"
entrypoint: "/usr/bin/tini -- wait-for-it opensearch:9200 -- /docker-entrypoint.sh"
environment:
TZ: "Asia/Tokyo"
GRAYLOG_ROOT_TIMEZONE: "Asia/Tokyo"
GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/config/node-id"
GRAYLOG_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET:?Please configure GRAYLOG_PASSWORD_SECRET in the .env file}"
GRAYLOG_ROOT_PASSWORD_SHA2: "${GRAYLOG_ROOT_PASSWORD_SHA2:?Please configure GRAYLOG_ROOT_PASSWORD_SHA2 in the .env file}"
GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9000/"
GRAYLOG_ELASTICSEARCH_HOSTS: "http://opensearch:9200"
GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
ports:
- "5044:5044/tcp" # Beats
- "1514:1514/udp" # Syslog
- "1514:1514/tcp" # Syslog
- "5555:5555/tcp" # RAW TCP
- "5555:5555/udp" # RAW TCP
- "9000:9000/tcp" # Server API
- "12201:12201/tcp" # GELF TCP
- "12201:12201/udp" # GELF UDP
#- "10000:10000/tcp" # Custom TCP port
#- "10000:10000/udp" # Custom UDP port
- "13301:13301/tcp" # Forwarder data
- "13302:13302/tcp" # Forwarder config
volumes:
- "graylog_data:/usr/share/graylog/data/data"
- "graylog_journal:/usr/share/graylog/data/journal"
restart: "on-failure"
volumes:
mongodb_data:
os_data:
graylog_data:
graylog_journal:
docker-composeから起動
※作業フォルダ直下で実行
sudo docker-compose up -d
sudo docker-compose ps
停止・削除
sudo docker-compose down
docker-compose down --rmi all --volumes --remove-orphans
ブラウザからアクセス
localhost:9000
にアクセスしてください。
IDはadmin
、パスワードは設定した<yourPassword>
を入力してログインしてください。
受信ログの設定
「System」から「Inputs」を選択
「Syslog UDP」を選択して「Launch new input」をクリック
「Title」と「Port」を変更
「Launch input」を追加後、「Show received messages」をクリック
よくあるエラー
-
Graylogサーバーが立ち上がらない
curl localhost:9000
を実行してRecv failure: Connection reset by peer
が出る場合はopensearchが立っていない可能性がある
docker-compose logs opensearch
で状況を確認
-
ログインできない
自分はこれで1週間悩んだが原因がよくわからなかったので、作業フォルダ(最初)から作り直すことをお勧めします。
-
サーバーを再起動したら受信できなくなった(ダッシュボードに表示されない)
GraylogのInputs設定で使用している「More actions」>「Edit input」から「input設定」が正しい事を確認してください。特に再起動すると「Node」が選択されていない(「Select Node」になっている)時があります。
-
「Input」には入ってそうだけど、ダッシュボード・サーチに表示されない
「System」⇒「Overview」を選択し、ページ中央の「Time configuration」項目ですべて同じ時刻になっていることを確認また、OSの時刻とGraylog serverの時刻があっていることも一応確認
⇒OSの時刻とYour web browserは多分同じ...
なっていなければ修正すべき時刻を修正
例えば、日本時間は+9:00なのでそれに準じていないものを修正する- Graylogの時刻設定はymlのファイルの
TZ:
とGRAYLOG_ROOT_TIMEZONE:
項目 - VM内の時刻と現時刻が違うときはVMの設定を変更
- Syslog側から書き出されるログの時刻が日本時間じゃない場合もある
- Graylogの時刻設定はymlのファイルの
兎にも角にもログとGraylog serverの時刻を同じにする
尚、ログの時刻の方が過去の場合、コンソールから時計マークの横のプルダウンから「all messages」を選択したら見える
(ログの時刻が未来の可能性がある場合は時計マークをクリックして「Absolute」から範囲を設定して見れるかも...?)
雑記になってしまったのでなにかわからないことがあれば連絡してください。
世の為、人の為になる事を願っております。
さばめろん