Table of Contents
Great systems are not just built. They are monitored.
MetricFire runs Graphite and Grafana as a fully managed service for growing engineering teams, taking care of storage, scaling, and version updates so your team doesn't have to. Plans start at $19/month, billed per metric namespace rather than per host, and include engineer-staffed support. Integrations work natively with Heroku, AWS, Azure, and GCP, and data is stored with 3× redundancy in SOC2- and ISO:27001-certified data centres.
はじめに
GitHubリポジトリを監視することは、コード品質の維持、コラボレーションの促進、円滑な開発ワークフローの実現、そしてプロジェクト管理と効率全体の向上に不可欠です。これにより、コードの変更、プルリクエスト、イシュー、コメントに関する最新情報を把握できるほか、チームメンバー間のコラボレーションが円滑になり、プロジェクトの進捗や状況についてチーム全体が確実に情報を共有できるようになります。
本記事では、Telegrafエージェントを使用してGitHubリポジトリの統計情報を収集し、データソースに転送する方法について詳しく解説します。
Telegrafエージェントの始め方
Telegrafは、InfluxDB上に構築されたプラグイン駆動型のサーバーエージェントであり、データベース、システム、プロセス、デバイス、アプリケーションからメトリクスやイベントを収集して送信します。Goで記述されており、外部依存のない単一のバイナリとしてコンパイルされ、最小限のメモリ使用量で動作します。Telegrafは多くのオペレーティングシステムと互換性があり、さまざまなシステムパフォーマンスメトリクスを収集・転送するための有用な出力プラグインおよび入力プラグインを多数備えています。
Telegrafのインストール(Linux / Redhat)
Telegrafをダウンロードして解凍します(最新バージョンおよび多くのOS向けのインストールコマンドについてはTelegrafのドキュメントをご参照ください)。パッケージやファイルは通常、/etcディレクトリにインストールされます。
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.21.2-1_amd64.deb
sudo dpkg -i telegraf_1.21.2-1_amd64.deb
RedHat/CentOS
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.21.4-1.x86_64.rpm
sudo yum localinstall telegraf-1.21.4-1.x86_64.rpm
出力の設定
Telegrafは、Kafka、Graphite、InfluxDB、Prometheus、SQL、NoSQLなど、さまざまなデータ送信先に出力するよう設定できます。
この例では、Graphite出力でtelegrafを設定します。現在データソースをホストしていない場合は、次の手順を進めるためにMetricFireのHosted Graphiteで無料トライアルを開始できます。
Hosted Graphiteアカウントは、データソースを提供し、アラート機能を提供し、可視化ツールとしてHosted Grafanaを含みます。
Graphite出力を設定するには、ダウンロードしたtelegraf設定ファイル(/etc/telegraf/telegraf.conf)を見つけ、好みのテキストエディタで開きます。その後、ファイルに対して以下の変更を行います:
次の行を見つけてコメントアウトします。
# [[outputs.influxdb]]
次の行のコメントを解除します。
[[outputs.graphite]]
次に、server行のコメントを解除し、以下のように編集します。
servers = ["carbon.hostedgraphite.com:2003"]
最後に、prefix行のコメントを解除し、以下のように編集します。
prefix = "<YOUR_API_KEY>.telegraf"
または、別のデータソースにメトリクスを送信するために、他のTelegraf出力を設定することも可能です。
TelegrafのGitHub入力プラグインの設定
Telegrafには、多くの一般的な技術やサードパーティソースから幅広いデータを収集できる多数の入力プラグインがあります。この例では、GitHubリポジトリからメトリクスを収集して転送する方法を説明します。
まず、telegraf.confファイル内で inputs.github セクションを探し、[[inputs.github]] の行のコメントを解除し、repositoriesの行もコメント解除および設定します。
[[inputs.github]]
repositories = [
"<account-name>/<repository>",
"BenjaminPitts/django-practice-app"
]
次に、GitHubアカウント内でアクセストークンを作成する必要があります。これにより、TelegrafとGitHub間のリクエストが認証されます。
- GitHubアカウントにログインした状態で、Account Settings ⇒ Developer Settings ⇒ Personal Access Tokens に移動します。その後、新しいトークンを生成し、有効期限を設定し、次の権限を選択します:admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete:packages, delete_repo, gist, notifications, repo, user, workflow, write:discussion, write:packages
- その後、telegraf.confファイルに戻り、access_token の行をコメント解除して設定します。
- また、pull間隔(GitHubへのリクエスト数を制限するため)を設定したり、PRデータを取得するために additional_fields の行をコメント解除して設定することもできます。
access_token = "ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
interval = "120m"
additional_fields = ['pull-requests']
最後に、変更を保存し、以下のコマンドを使用してTelegrafをサーバーとして実行し、出力に設定エラーがないか確認します:
telegraf --config telegraf.conf
Telegrafはこれで、各リポジトリごとにおよそ10個のメトリクスを設定されたデータソースに転送します。TelegrafのGraphite出力を使用している場合、メトリクスは以下の形式になります:
telegraf.<host>.<repo-language>.<repo-license>.<repo-name>.<repo-owner>.github_repository.<metric>
telegraf.confファイルで定義された各GitHubリポジトリに対して、以下のフィールドのメトリクスを受け取ることができます:
closed_pull_requests, forks, networks, open_issues, open_pull_requests, size, stars, subscribers watchers
追加の設定オプションについては、GitHubプラグインの公式GitHubリポジトリをご参照ください。
MetricFireのHosted Graphiteを使用してカスタムダッシュボードとアラートを作成
MetricFireは、サーバー、データベース、ネットワーク、プロセス、デバイス、アプリケーションからメトリクスやデータを収集・可視化・分析できるモニタリングプラットフォームです。MetricFireを使用することで、インフラストラクチャ内の問題を簡単に特定し、リソースを最適化することができます。MetricFireのHosted Graphiteは、監視ソリューションを自分でホスティングする負担を取り除き、より重要な作業に時間と自由を割くことを可能にします。
Hosted Graphiteアカウントにサインアップし、上記の手順でサーバーをTelegrafエージェントで設定すると、メトリクスはHosted Graphiteのバックエンドに転送され、タイムスタンプが付与され、集約されます。
-
メトリクスは次のGraphite形式で送信および保存されます:metric.name.path <numeric-value> <unix-timestamp>
-
このドット表記の形式はツリー構造のようなデータ構造を提供し、効率的なクエリを可能にします。
-
メトリクスはHosted Graphiteアカウントに2年間保存され、カスタムアラートやGrafanaダッシュボードの作成に利用できます。
Hosted GraphiteのHosted Grafanaでダッシュボードを構築
Hosted GraphiteのUIで、Dashboards ⇒ Primary Dashboards に移動し、「+」ボタンを選択して新しいパネルを作成します。
その後、クエリUIを使用してGraphiteのメトリクスパスを選択できます(Hosted Graphiteアカウント経由でGrafanaにアクセスしている場合、デフォルトのデータソースはHosted Graphiteのバックエンドになります)。
Hosted Graphiteのデータソースは、指定したパスに一致するすべてのメトリクスを取得するために、ワイルドカード(*)検索もサポートしています。
次に、これらのメトリクスに対してGraphite関数を適用できます。例えば、aliasByNode() を使ってメトリクス名を再フォーマットしたり、exclude() を使って特定のメトリクスパターンを除外したりできます。
Grafanaには、さまざまな可視化を適用したり、表示を変更したり、測定単位を設定したり、ダッシュボード変数やイベント注釈の設定といったより高度な機能も多数用意されています。
詳細については、Hosted Graphiteのダッシュボードドキュメントをご参照ください。
Graphiteアラートの作成
Hosted GraphiteのUIで、Alerts ⇒ Graphite Alerts に移動し、新しいアラートを作成します。アラートに名前を付け、アラート対象のメトリクスフィールドにクエリを追加し、このアラートが何を示すものかの説明を追加します。
その後、Alert Criteriaタブを選択してしきい値を設定し、通知チャネルを選択します。デフォルトの通知チャネルは、Hosted Graphiteアカウント登録時に使用したメールアドレスです。さらに、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなどのチャネルも簡単に設定できます。通知チャネルの詳細については、Hosted Graphiteのドキュメントをご参照ください。
まとめ
アクティブなGitHubリポジトリを監視することは、コード品質、セキュリティ、コンプライアンス、効果的なコラボレーション、パフォーマンス最適化、リスク軽減を確保するのに役立ちます。また、ビジネスの目標に沿ったデータ駆動型の意思決定を行うことにも貢献します。
ダッシュボードやアラートのようなツールは、リアルタイムの可視化、問題の事前検知、過去のトレンド分析、そして十分な情報に基づいた意思決定を可能にすることで、このデータを補完します。これらはすべて、堅牢で効率的なインフラを維持するために不可欠です。
無料トライアルに登録して、今すぐGitHubリポジトリの監視をお試しください。また、デモを予約して、監視のニーズについてMetricFireチームと直接ご相談いただくことも可能です。