OllamaのログをGrafana Lokiで収集・監視する方法|PromtailでAIサーバーの稼働状況を可視化する手順

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > ローカルLLM > OllamaのログをGrafana Lokiで収集・監視する方法|PromtailでAIサーバーの稼働状況を可視化する手順
「Ollamaサーバーでエラーが起きているが、journalctlだけでは複数台のログを追いきれない…」
「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への読み取り権限不足


OllamaのログをGrafana Lokiで収集・監視する方法|PromtailでAIサーバーの稼働状況を可視化する手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜ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

`docker-compose.yml`を以下の内容で作成する。`GF_SECURITY_ADMIN_PASSWORD`は必ず変更すること。

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

`ready`と返れば起動完了だ。Grafanaは`http://SERVER_IP:3000`でブラウザからアクセスできる。

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)

`Active: active (running)`が確認できれば次のステップへ進む。この時点ではデフォルト設定で起動しているだけなので、次のセクションでOllama専用の設定を行う。

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

`action: keep`により`ollama.service`に一致するログだけを残し、他のsystemdサービスのログは転送しない。Lokiのストレージを節約できる。

社内で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の読み取り成功

`successfully scraped journal`のログが出ていれば、Promtailが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"

`|=`は完全一致フィルタ、正規表現には`|~`を使い`{job="ollama"} |~ "loaded|unloaded|llm"`のように記述する。モデル名でフィルタリングするには`{job="ollama"} |= "llama3.3:70b-instruct-q4_0"`のように記述する。正確なモデル名の確認方法についてはローカルLLMのモデルを比較する方法も参考にしてほしい。

よくあるトラブルと対処法

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 (エラーが消えていれば対処完了)

Lokiにログが届かない(GrafanaのExploreに何も表示されない)
Promtailの設定ファイルの`url`が間違っているか、Lokiコンテナが起動していない可能性がある。

$ curl -s http://localhost:3100/ready ready

`ready`と返ればLokiは起動中だ。PromtailのログにエラーがあればURL設定(`http://localhost:3100/loki/api/v1/push`)とLokiのポートを再確認する。GrafanaのデータソースURLは`http://loki:3100`(Docker ComposeサービスDNS名)を指定すること。

まとめ

各コンポーネントの要点を以下にまとめる。
コンポーネント 主要コマンド・設定ファイル 役割
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を記述
Promtailのrelabel_configsを調整すれば、Ollama以外のsystemdサービスのログも同じLokiインスタンスに集約できる。

ローカルLLMの監視・運用をハンズオンで学ぶ

Loki・Prometheus・Grafanaを組み合わせた監視スタックの構築は、コマンドで体験しないと感覚がつかみにくい領域です。典型的なトラブルのデバッグ手順も含めて、実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。