「Grafanaのダッシュボードでメトリクスとログをまとめてチェックできたら運用が楽になるのに…」
そんな悩みを抱えるLinuxサーバー管理者は多い。Ollamaはsystemdサービスとして稼働しログをjournaldに書き出すが、エラーパターンの絞り込みや複数サーバーにまたがったログ集約には専用ツールが必要になる。この記事では、GrafanaのログストレージであるLokiと、ログ収集エージェントのPromtailをUbuntu Serverに導入し、Ollamaのsystemdログをリアルタイムで収集・可視化する手順を解説する。Prometheusのメトリクス監視と組み合わせれば、Ollamaサーバーの運用監視体制が整う。
この記事のポイント
・GrafanaとLokiはDocker Composeで起動し、Promtailはapt経由でUbuntuホストに直接インストールする
・Promtailのjournalスクレイプ設定に`ollama.service`のrelabel_configsを追加することでOllamaログだけを選別して転送できる
・LogQLの`{job="ollama"} |= "error"`構文でエラーログをリアルタイムに絞り込める
・Promtail接続エラーの典型原因はLokiのURL設定ミスとjournaldへの読み取り権限不足
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜLokiによるログ監視がOllamaの運用に必要か
Ollamaはデフォルトでsystemdサービスとして動作し、ログはjournaldに蓄積される。単一サーバーなら`journalctl -u ollama -f`で足りるが、複数台を運用すると各サーバーにSSHして確認する手間が生じる。またPrometheusのメトリクスとログを同一画面に集約できない点も運用上の課題だ。GrafanaのLokiはラベルベースで動作するログ集約システムで、ログ全文インデックスを張らないためストレージコストが低く、小規模サーバーでも気軽に運用できる。Ubuntu ServerでローカルLLMを構築する方法でOllamaを導入済みの場合、本記事の設定を加えることでログ監視の基盤が整う。
Lokiスタックのアーキテクチャと前提環境の確認
本記事の構成は「Promtail(ホスト直インストール)→ Loki(Docker)→ Grafana(Docker)」の3コンポーネントだ。PromtailをDockerではなくホスト直インストールにする理由は、コンテナ内からjournaldを読む場合の権限設定が複雑になるためで、ホスト直インストールであればシンプルに解決する。前提: Ubuntu Server 22.04/24.04 LTS・Ollama稼働中・Docker Compose v2系インストール済み・sudo権限あり。
GrafanaとLokiをDocker Composeで起動する
1. 作業ディレクトリとdocker-compose.ymlの作成
作業用ディレクトリを作成する。$ mkdir -p ~/loki-stack && cd ~/loki-stack
services: loki: image: grafana/loki:2.9.8 ports: - "3100:3100" volumes: - loki-data:/loki command: -config.file=/etc/loki/local-config.yaml restart: unless-stopped grafana: image: grafana/grafana:10.4.0 ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=changeme_strong_pw volumes: - grafana-data:/var/lib/grafana restart: unless-stopped volumes: loki-data: grafana-data:
2. コンテナの起動と稼働確認
$ docker compose up -d $ curl -s http://localhost:3100/ready ready
PromtailをUbuntu Serverにインストールする
$ sudo apt-get install -y apt-transport-https software-properties-common wget $ sudo mkdir -p /etc/apt/keyrings/ $ wget -q -O - https://apt.grafana.com/gpg.key | \ gpg --dearmor | \ sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null $ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | \ sudo tee /etc/apt/sources.list.d/grafana.list $ sudo apt-get update $ sudo apt-get install -y promtail $ systemctl status promtail --no-pager | grep Active Active: active (running)
OllamaのsystemdログをPromtailで収集する
1. Promtailの設定ファイルを作成する
aptでインストールしたPromtailのデフォルト設定ファイルは`/etc/promtail/config.yml`だ。`sudo nano /etc/promtail/config.yml`を開き、以下の内容を記述する。`localhost:3100`の部分はLokiが別サーバーにある場合はそのIPアドレスに変更する。server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /var/lib/promtail/positions.yaml clients: - url: http://localhost:3100/loki/api/v1/push scrape_configs: - job_name: ollama journal: max_age: 12h labels: job: ollama relabel_configs: - source_labels: ['__journal__systemd_unit'] target_label: 'unit' - source_labels: ['__journal__systemd_unit'] regex: 'ollama.service' action: keep
社内でOllamaを情報系システムとして運用する背景については、社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢が参考になる。
2. 設定の反映と収集確認
Promtailを再起動して設定を反映する。$ sudo systemctl restart promtail $ sudo journalctl -u promtail -n 20 --no-pager | grep -i "scrape\|error" # successfully scraped journal と表示されればjournaldの読み取り成功
GrafanaでLokiデータソースを設定してログを確認する
`http://SERVER_IP:3000`にログイン後、「Connections」>「Data sources」>「Add data source」からLokiを選択する。URL欄に`http://loki:3100`(Docker ComposeのサービスDNS名)を入力し「Save & test」をクリックする。「Data source connected and labels found」が表示されれば完了だ。「Explore」からLokiを選び以下のLogQLでOllamaのログを確認する。# GrafanaのExplore画面で入力するクエリ例 {job="ollama"}
LogQLでOllamaのエラーパターンを絞り込む
LogQLはLoki専用のクエリ言語だ。Ollamaの運用で使いやすいパターンを示す。エラーログだけを表示する:
{job="ollama"} |= "error"
よくあるトラブルと対処法
Promtailがjournaldを読めず「permission denied」が出る`systemd-journal`グループへの追加で解決できる。
$ sudo usermod -aG systemd-journal promtail $ sudo systemctl restart promtail $ sudo journalctl -u promtail -n 10 --no-pager | grep -i error (エラーが消えていれば対処完了)
Promtailの設定ファイルの`url`が間違っているか、Lokiコンテナが起動していない可能性がある。
$ curl -s http://localhost:3100/ready ready
まとめ
各コンポーネントの要点を以下にまとめる。| コンポーネント | 主要コマンド・設定ファイル | 役割 |
|---|---|---|
| Loki | docker compose up -d(grafana/loki:2.9.8) | ログの受信・保存(ポート3100) |
| Grafana | docker compose up -d(grafana/grafana:10.4.0) | ログのUI可視化・LogQLクエリ(ポート3000) |
| Promtail | sudo apt-get install promtail | journaldからOllamaログを読みLokiへ転送 |
| Promtail設定 | /etc/promtail/config.yml | ollama.serviceのみに絞るrelabel_configsを記述 |
ローカルLLMの監視・運用をハンズオンで学ぶ
Loki・Prometheus・Grafanaを組み合わせた監視スタックの構築は、コマンドで体験しないと感覚がつかみにくい領域です。典型的なトラブルのデバッグ手順も含めて、実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。
・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:OllamaをLinuxサーバーごと移行する方法|モデル・systemd設定をrsyncで新環境へ移設する完全手順
- この記事の属するカテゴリ:ローカルLLMへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます