Logging and network monitoring on Wyse3040 (OS:OpenSUSE)
はじめに
Wyse 3040 Thin Clientが2500円で売られていたので買いました。
ストレージはeMMCの8GBですが、USBを4本指すことのできる機器となっています。
そのままファイルサーバーにしようかなとも考えましたが、
自宅のネット環境のログ収集・ネットワーク監視する機器として使うのも面白いのではないかと思い、今回作成してみました。
Wyse 3040 Thin ClientのBIOS設定
私の場合、なぜか電源ボタンを押してもBIOSが立ち上がらなかったので、CMOSクリアを行いました。中を開けるとCMOS CLEARというボタンがあるので、そこを押すことでCMOSクリアが出来ます。
起動が出来ましたら、F2連打でBIOS画面に入ります。デフォルトパスワードはFireportとなっています。
※BIOSがロックされているので、はじめに解除する際にこのパスワードを使用します。
その後、BIOS画面でEnable USB BootをON、Secure BootをDisableにしてください。
参考:https://qubitsandbytes.co.uk/install-a-new-os-on-a-dell-wyse-3040/
OpenSUSEインストール
自宅においてあるサーバーが全てOpenSUSEでしたので、個人的に使い勝手が良いOpenSUSEをインストールしました。
以下のURLからダウンロードしてUSBにいれました。
https://get.opensuse.org/ja/leap/15.6/
システム要件をみるとハードディスクが40GB以上となっていて、無事に足りていないことがわかりますが、最小要件なら動くだろうと思いインストールしました。(CPUも・・)
localhost:/etc/loki # sudo zypper install neofetch
localhost:/etc/loki # neofetch
`-++:` hogehoge@localhost
./oooooo/- ------------------
`:oooooooooooo:. OS: openSUSE Leap 15.6 x86_64
-+oooooooooooooooo+-` Host: Wyse 3040 Thin Client
./oooooooooooooooooooooo/- Kernel: 6.4.0-150600.21-default
:oooooooooooooooooooooooooo: Uptime: 3 days, 20 hours, 52 mins
` `-+oooooooooooooooooooo/- ` Packages: 810 (rpm)
`:oo/- .:ooooooooooooooo+:` `-+oo/. Shell: bash 4.4.23
`/oooooo:. -/oooooooooo/. ./oooooo/. Terminal: /dev/pts/0
`:+ooooo+-` `:+oooo+- `:oooooo+:` CPU: Intel Atom x5-Z8350 (4) @ 1.920GHz
.:oooooo/. .::` -+oooooo/. GPU: Intel Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx
-/oooooo:. ./oooooo+- Memory: 452MiB / 1885MiB
`:+ooooo+-:+oooooo:`
./oooooooooo/.
-/oooo+:`
`:/.
無事にLeapがインストールされているのがわかります。
次にネットワーク管理としてLokiとPromtail、Rsyslogをインストールしていきます。
Lokiのインストール
※LokiやPromtailのバージョンを2.8.7で指定していますが、最新版でも問題ないと思います。
sudo zypper refresh
# 必要なパッケージのインストール
sudo zypper install rsyslog wget
# Lokiのインストール(github)
wget https://github.com/grafana/loki/releases/download/v2.8.7/loki-linux-amd64.zip
unzip loki-linux-amd64.zip
chmod +x loki-linux-amd64
# Lokiを /usr/local/bin に移動
sudo mv loki-linux-amd64 /usr/local/bin/loki
Lokiの設定ファイルを作成していきます。
# Lokiの設定ファイル作成
sudo mkdir -p /etc/loki
sudo nano /etc/loki/config.yaml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /var/lib/loki
storage:
filesystem:
chunks_directory: /var/lib/loki/chunks
rules_directory: /var/lib/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-12-14
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /var/lib/loki/boltdb-shipper-active
cache_location: /var/lib/loki/boltdb-shipper-cache
cache_ttl: 24h
shared_store: filesystem
filesystem:
directory: /var/lib/loki/chunks
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h # 1週間のログ保持
次にLokiのシステムサービス関連のファイルを作成していきます。
sudo mkdir -p /var/lib/loki
sudo chown -R $USER:users /var/lib/loki
# Systemdサービスファイル作成
sudo nano /etc/systemd/system/loki.service
[Unit]
Description=Loki Log System
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/config.yaml
Restart=on-failure
[Install]
WantedBy=multi-user.target
Rsyslog設定ファイル変更
RsyslogのログをLokiに直接送るのではなく、今回は一度ログをvar以下に出力させて、それをPromtailに与える構成にしました。
sudo mkdir -p /var/log/rsyslog
# /etc/rsyslog.confの最終行に以下を追加
template(name="LocalLogs" type="string" string="/var/log/rsyslog/%hostname%/%$YEAR%-%$MONTH%-%$DAY%.log")
*.* action(type="omfile" DynaFile="LocalLogs" template="RSYSLOG_FileFormat")
Rsyslogのログが貯まりすぎるのが怖かったので、今回はcronに直接以下の行を追加しました。
# VISUAL=nano crontab -e
0 0 * * 0 find /var/log/rsyslog/ -type f -mtime +7 -delete
Promtailのインストール
Promtailもインストールしていきます。Lokiとほぼ同じインストール方法です。
# Promtailのインストール(github)
wget https://github.com/grafana/loki/releases/download/v2.8.7/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
chmod +x promtail-linux-amd64
# Promtailを /usr/local/bin に移動
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
Promtailの設定ファイルを作成していきます。
sudo mkdir -p /etc/promtail
sudo nano /etc/promtail/config.yaml
Promtailの基本的な設定ファイルの書き方は以下のようになっています。
先ほどのRsyslogのログファイルをlokiに送るようにしてあります。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: 'rsyslog'
static_configs:
- targets:
- localhost
labels:
job: rsyslog
__path__: /var/log/rsyslog/*/*/*.log
Promtailのシステムサービス関連のファイルを作成していきます。
[Unit]
Description=Promtail service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/promtail -config.file /etc/promtail/config.yaml
[Install]
WantedBy=multi-user.target
Grafanaのインストール
Grafanaをインストールしていきます。
sudo zypper addrepo https://packages.grafana.com/oss/rpm-stable/opensuse/stable grafana
sudo rpm --import https://packages.grafana.com/gpg.key
sudo zypper refresh
sudo zypper install grafana
左側のサイドバーで「Connections」をクリック して「Add new connection」を選択します。
目的のデータソース(今回の場合はLoki)を選択・接続設定を入力(http://localhost:3100
(Lokiのデフォルトポート))
その後、全てのシステムを有効化します。journalctlやsystemctl status等でエラーが出ていないか確認してください。
sudo systemctl daemon-reload
# Lokiを有効化
sudo systemctl enable loki
sudo systemctl start loki
# Rsyslogの有効化
sudo systemctl enable rsyslog
sudo systemctl start rsyslog
# Promtailの有効化
sudo systemctl enable promtail
sudo systemctl start promtail
# Grafanaの有効化
sudo systemctl enable grafana.service
sudo systemctl start grafana.service
以上で基本的な設定は終了です。次に、Promtailで取得したい追加のログファイルを作成していきます。
別サーバーのログの取得
別サーバーのログ取得についてですが、様々な方法があるとは思います。
今回は個人的に一番簡単なscpコマンドを使って取得をするというものにしました。
# 私のものは既にインストールされていたが、もしされていなければ行う
sudo zypper install openssh
# 鍵の生成
ssh-keygen -t rsa -b 4096
ssh-copy-id hogehoge@remote-server
その後、scpで取得したいログファイルを取得していきます。
※通常、ログファイルはrootや限定されたユーザーしかアクセスできないようになっているため、権限の変更が必要です。chgrpやchmodを使って自分に合った権限に変更する必要があります。
Apacheのログファイルを例にスクリプトを作成しました。Rsyslogと同様にvar以下に一度保存する形式となっています。
#!/bin/bash
REMOTE_HOST="remote-server" # ipアドレスもしくはドメイン
REMOTE_USER="hogehoge" # ユーザー名
SSH_KEY_PATH="/home/username/.ssh/id_rsa" # 鍵の場所
# 取得したいサーバー側のログ
LOGS=(
"/var/log/apache2/access_log"
"/var/log/apache2/access_default.log"
"/var/log/apache2/access_default_ssl.log"
)
# Wyseで保存する場所
LOCAL_LOG_DIR="/var/log/apache2"
sync_log_file() {
local log_path=$1
local filename=$(basename "$log_path")
scp -i "${SSH_KEY_PATH}" -q "${REMOTE_USER}@${REMOTE_HOST}:${log_path}" "${LOCAL_LOG_DIR}/${filename}"
chmod 744 "${LOCAL_LOG_DIR}/${filename}"
if [ $? -eq 0 ]; then
echo "Successfully synced: ${filename}"
else
echo "Failed to sync: ${filename}"
fi
}
main() {
mkdir -p "${LOCAL_LOG_DIR}"
for log in "${LOGS[@]}"; do
sync_log_file "$log"
done
}
main
ルーターのログファイル取得
自宅ではElecomのWifiルーターを使用しています。その場合以下のコマンドでログの取得が可能です。
# ルーターのログファイル取得
wget http://admin:password@192.168.2.1/others/save_log.sh -O /var/log/router.log
これを先ほどのApacheのログ取得スクリプトに追加してもいいですし、別で回してもいいと思います。
他のルーターを使用されている方は仕様書などを参考に作成してもらえたらと思います。
設定例
参考までに、私のPromtailの設定を載せておきます。
今回はwebサーバーのログ、ルーターのログ、Rsyslogのログを取得するようにしました。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
tenant_id: ""
batchwait: 1s
batchsize: 1024000
scrape_configs:
- job_name: bokumin45_webserver
file_sd_configs:
- files:
- /etc/promtail/targets/*.yml
refresh_interval: 5m
- job_name: router_syslog
static_configs:
- targets:
- localhost
labels:
job: router_syslog
__path__: /var/log/router.log
- job_name: 'rsyslog'
static_configs:
- targets:
- localhost
labels:
job: rsyslog
__path__: /var/log/rsyslog/*/*/*.log
targetsディレクトリのymlファイルは以下のようになっています。
# cat bokumin45.yml
- targets:
- localhost
labels:
job: bokumin45_access
__path__: /var/log/apache2/access_log
- targets:
- localhost
labels:
job: bokumin45_access_default
__path__: /var/log/apache2/access_default.log
- targets:
- localhost
labels:
job: bokumin45_access_default_ssl
__path__: /var/log/apache2/access_default_ssl.log
まとめ
Wyse3040でのネットワーク監視システム構築の方法について記載しました。ファイルサーバーもいいですが、わざわざストレージ用意するのが面倒だという方の参考になれば幸いです。
まだ何台かは在庫が残っていますので、もし興味があれば是非購入してみてください。
Dell Wyse 3040 Thin Client 商品ページ:https://ut-pcmobile.easy-myshop.jp/c-item-detail?ic=A000000020
追記:
eMMCの寿命はHDDやSSDと比べるとかなり短いです。その為、var以下(ログファイル)の部分は他のストレージで行う方がWyse3040も長持ちすると思います。
以下の記事にOpenSUSEで特定のディレクトリを他ストレージに移行する方法が書いてありますので、参考にしてもらえると幸いです。