GitLab システム管理者 - ハンズオンラボ: GitLab Omnibus のロギングと監視
推定所要時間: 30 分
目的
このラボの目的は、ログ分析と監視のために Prometheus と Grafana を使用する方法を示すことです。
タスク A. Prometheus サービスへのアクセス
GitLab の Prometheus サーバーは TCP ポート 9090 経由で接続できます。残念ながら、トレーニング環境では現在そのポートへのインバウンドトラフィックがブロックされています。回避策として、次のように SSH トンネルを開くことができます。
ssh -L 9090:localhost:9090 -i <SSH_KEY_NAME> student-user@<BASTION_SERVER_IP> ssh -L 9090:localhost:9090 -i ~/.ssh/ilt_key root@<OMNIBUS_IP>Web ブラウザーで
http://localhost:9090に移動して、組み込み Prometheus サーバーを表示します。Prometheus で利用可能なメトリクスを表示するには、
http://localhost:9090/metricsに移動します。各メトリクスの詳細なリストについては、ドキュメントを参照してください。
タスク B. Prometheus メトリクスの表示
この例では、GitLab インスタンスに送信された HTTP リクエストを監視したいとします。これを実現するために、組み込みの GitLab メトリクスを使用できます。
http://localhost:9090に移動します。虫眼鏡ボタンの横の入力欄に
http_requests_totalと入力します。Execute ボタンをクリックします。
Table をクリックして、クエリによって生成されたすべての結果のテーブルを表示します。
結果にさまざまな HTTP リクエストが表示される可能性があります。各リクエストの
job、instance、HTTP method、statusが確認できます。Graph をクリックしてデータのグラフを表示します。
グラフの左側に - と + ボタンがあります。これらのボタンをクリックしてグラフのスケールを変更できます。スケールを調整してデータへの影響を確認してみてください。
タスク C. アラート設定
Prometheus は特定のメトリクスに基づいて管理者にアラートを送信するために使用できます。GitLab には Prometheus の定義済みアラートセットが付属しています。
http://localhost:9090に移動します。上部メニューで Alerts をクリックします。
GitLab と Node という 2 つのアラートルールセットがあることに注意してください。GitLab アラートは、サービスのダウン、Postgres のダウン、サービス内の高いキューイングなどのプラットフォームの問題に対応します。Node アラートは GitLab がデプロイされているサーバーに対応します。
アラートルールを含むファイルをメモします。デフォルトでは、ファイルは
/var/opt/gitlab/prometheus/rules/gitlab.rulesです。管理者として、このファイル内にカスタムルールを定義してアラートに使用できます。これにより、潜在的な問題に対してシステムを監視できます。
タスク D. 一般的なパフォーマンスメトリクス
管理者が GitLab インスタンスのパフォーマンスを監視するために使用できるさまざまなメトリクスがあります。インスタンスを監視するために使用できる一般的なクエリをいくつか見てみましょう。
http://localhost:9090に移動します。虫眼鏡ボタンの横の入力欄に、次のクエリを入力します。
((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100このクエリにより、インスタンスで利用可能なメモリの割合が表示されます。
Graph タブをクリックして、経時的なメモリの割合を表示します。
クエリ入力欄で前のクエリを削除し、次のクエリに置き換えます。
1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))このクエリにより、インスタンスで使用された CPU の割合が表示されます。
Graph をクリックして、経時的な CPU 使用率を表示します。
これらのメトリクスや他の多くのメトリクスについて、特定の条件に対してアラートを設定することを検討することをお勧めします。例えば、CPU 使用率が継続的に 50% を超える場合にアラートを設定できます。これは問題の兆候である可能性があります。
タスク E. Grafana のインストール
Grafana は、GitLab インスタンスのログとメトリクスを可視化する方法を提供します。まず Grafana をインストールしましょう。
GitLab インスタンスに SSH 接続します。
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor > /etc/apt/keyrings/grafana.gpgを使用して Grafana キーをインスタンスにプルします。echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.listを使用してリポジトリをパッケージマネージャーに追加します。apt リポジトリを更新します:
sudo apt-get updateapt-get install loki promtail grafanaを使用して Grafana と関連コンポーネントをインストールします。sudo systemctl start grafana-serverを使用して Grafana サーバーを起動します。Grafana が実行されていることを確認するには、
http://your-omnibus-ip:3000/loginに移動します。デフォルトのユーザー名とパスワードはadminです。
タスク F. ログを収集するための Grafana の設定
Grafana は、ログの収集と分析のための便利なツールを提供します。Grafana が GitLab のログファイルをキャプチャして表示するように設定する方法を見てみましょう。
GitLab インスタンスに SSH 接続します。
お好みのテキストエディターで
/etc/promtail/config.ymlファイルを開きます。このファイルで、サーバー、positions、クライアントを確認します。
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://localhost:3100/loki/api/v1/push特に
lokiの URL とポートをメモします。後で使用します。ログ収集設定は、設定ファイルの
scrape_configsセクションで設定されます。これらの設定には、次の値を設定する必要があります。targets: ターゲットログファイルの場所(通常はlocalhost)job: ログスクレイピングジョブの一意の名前__path__: ログファイルの場所
例として、次の
scrape_configsを Grafana 設定ファイルにコピーして、既存のscrape_configsファイルを置き換えます。scrape_configs: - job_name: nginx static_configs: - targets: - localhost labels: job: nginx __path__: /var/log/gitlab/nginx/* - job_name: workhorse static_configs: - targets: - localhost labels: job: workhorse __path__: /var/log/gitlab/gitlab-workhorse/* - job_name: rails static_configs: - targets: - localhost labels: job: rails __path__: /var/log/gitlab/gitlab-rails/production_json.logこの設定により、3 つのログファイル(Nginx、Workhorse、rails)が Grafana に追加されます。
このデータを追加したら、ファイルを保存します。
sudo systemctl restart promtailを使用してpromtailを再起動します。sudo systemctl status promtailでサービスが実行されていることを確認します。任意のテキストエディターで
/etc/loki/config.ymlファイルを開きます。querier:に関する最後の 3 行をコメントアウトまたは削除します。最終的なファイルは次のようになります。auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 log_level: debug grpc_server_max_concurrent_streams: 1000 common: instance_addr: 127.0.0.1 path_prefix: /tmp/loki storage: filesystem: chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules replication_factor: 1 ring: kvstore: store: inmemory query_range: results_cache: cache: embedded_cache: enabled: true max_size_mb: 100 limits_config: metric_aggregation_enabled: true schema_config: configs: - from: 2020-10-24 store: tsdb object_store: filesystem schema: v13 index: prefix: index_ period: 24h pattern_ingester: enabled: true metric_aggregation: loki_address: localhost:3100 ruler: alertmanager_url: http://localhost:9093 frontend: encoding: protobuf #querier: # engine: # enable_multi_variant_queries: trueファイルを保存します。
sudo systemctl restart lokiを使用してlokiを再起動します。sudo systemctl status lokiでサービスが実行されていることを確認します。また、ログが promtail と loki で読み取れるようにする必要があります。これを行うには、
chmod -R 755 /var/log/gitlabコマンドを使用してパーミッションを変更します。これが完了したら、
http://your-gitlab-ip:3000/loginで Grafana に移動します。admin ユーザーとして認証します。
左サイドバーで Connections > Add new connection を選択します。
Loki を選択します。
Add new data source を選択します。
URL に
http://localhost:3100を入力します。Save & Test を選択します。
Data source successfully connected というメッセージが表示されます。
タスク G. Grafana でデータを分析する
Grafana インスタンスに移動します。
左サイドバーで Explore を選択します。
Outline の横のドロップダウンで Loki が選択されていることを確認します。
Label filters に
jobを入力します。値に nginx を入力します。
必要に応じて、設定ファイルに定義されている任意のジョブ名に置き換えることができます。
Run query を選択して結果を表示します。ここで時間をとって、Grafana でのログのレビューとフィルタリングオプションを確認してください。
ラボガイド完了
このラボ演習を完了しました。このコースの他のラボガイドを参照できます。
ご提案はありますか?
ラボに変更を加えたい場合は、マージリクエストを通じて変更内容を送信してください。
