MetricFireへのメトリックの送信

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/994dba3c-2d1d-8ecc-7589-85206afe5214.png)
#はじめに

ITリソースの監視は、大中規模の企業の日常業務の一部ですが、中小企業も、監視システム、メモリ容量、可用性、およびパフォーマンスの利点から恩恵を受けています。このようなプロアクティブの目的は、スムーズなプロセスを確保することです。たとえば、IT管理者は、ディスク容量が少なくなりすぎていることを数日前に知っておく必要があります。そうすれば、IT管理者はそれに対して何かしらの対処を行うことができます。

何百もの監視ツールがありますが、Prometheus、Graphite、およびGrafanaが人気のあるオープンソースの監視ツールです。これらのツールを[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Sending%20metrics%20to%20MetricFire)などの1つのソリューションに融合すると、素晴らしい監視プラットフォームが完成します。

従来の監視ツールは、メモリやCPUなどのインフラストラクチャリソースの使用に重点を置いていますが、それだけではもはや十分ではありません。メトリックとより広い可観測性に基づいて、アプリケーション、サーバー、およびプラットフォームのより広いビューを持つことです。

Prometheus、Grafana、およびGraphiteは、メトリックの収集と視覚化の目的に役立ついくつかの優れたオープンソースツールですが、自分でスタックを設定する必要がある場合は、徹底的な作業になります。ここでMetricFireが活躍します。基盤となるインフラストラクチャのコストとメンテナンスは言うまでもなく、素晴らしい機能を提供しております。

#MetricFireとは
[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Sending%20metrics%20to%20MetricFire)は、上記３つのオープンソースツールをホストおよび保守しているため、見栄えのするGrafanaインターフェイスからメトリックを簡単に視覚化できます。さまざまな監視関連ツールを統合できる監視プラットフォームの必要性はかつてないほど高まっており、最近では、Docker、Kubernetesなどの新しい人気のあるインフラストラクチャテクノロジーがたくさんあります。これらはすべて拡張可能であり、公式ツールとサードパーティツールを統合しているため、機能の数と監視負荷の両方が増加していく傾向があります。 MetricFireは、システムから1つのパネルにメトリックを取り込むことができ、スケーラブルなソリューションです。

データ収集と視覚化の監視を簡素化するために、MetricFireなどの全会一致のプラットフォームの必要性が重要になります。それに加えて、MetricFireは、監視する基盤となるテクノロジーやプラットフォームに関しては不可知論者です。

アカウントをまだお持ちでない場合は、14日間無料で登録し、すべての機能のロックを解除できます。サインアップすると、MetricFireサポート担当者からすぐに電話がかかってきて、回避策を見つけることができます。

#メトリックをMetricFireに送信する方法
このチュートリアルでは、メトリックを[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Sending%20metrics%20to%20MetricFire)に送信し監視を開始する方法を解説していきます。

MetricFireにデータを供給するには、以下の2つのアプローチがあります。

- Hosted Graphite agent
- CollectDとStatsD

上記の2つのアプローチを確認したら、メトリック収集用にPrometheusインスタンスを設定する方法について説明し、チュートリアルの最後に、これらのメトリックをMetricFireに送信するプロセスを保護するための手法を説明していきます。

#Hosted GraphiteAgentを使用してメトリックを送信する
Hosted Graphiteを使用する場合、メトリックをMetricFireプラットフォームにフィードする方法は3つあります。

- MetricFireのエージェントを使用する
- コードの使用
- エージェント+Hosted Graphiteアドオン

###MetricFireのエージェントを使用する
最初の方法では、ターミナルを使用します。 サーバーでcURLコマンドを実行し、必要なコンポーネントが自動的にセットアップされます。 このコマンドは、MetricFireインスタンスへのデータの送信も開始します。 このコマンドには、MetricFireアカウントごとに異なるAPIキーが含まれていることに注意してください。

ダッシュボードにログインし、[How to send metrics]ボタンをクリックすると、APIキーを取得できます。 インストールコマンドをコピーしてサーバー上で実行し、MetricFireダッシュボードに接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/13c662d5-36d8-6dbd-04e4-fdc887d2ffac.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/3382e8cf-5b5e-26a8-4dee-906287d4ced9.png)

これは、Debianベースのシステムを使用する場合の例です。

```
curl -s https://XXXXXXXXXXXXXXXX@www.hostedgraphite.com/agent/installer/deb/ | sudo sh
```

次のスクリーンショットで説明されているように、「エージェント」をクリックして新しいエージェントを追加することによっても、同じコマンドを取得できることに注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/6d70a693-a2b0-c80d-67d9-fe3776bea49a.png)

###コードからのメトリクス
同様に、MetricFireダッシュボード内のコードのオプションをクリックすると、さまざまなプログラミング言語（Python、Java、Bashなど）ですぐに使用できるスニペットが表示されます。

ソースコードを利用できるようになったら、それをアプリケーションで簡単に利用して、MetricFireへのメトリックの送信を開始できます。

###エージェント + Hosted-Graphiteアドオン
3番目のオプションは最も興味深く、おそらくすべての中で最も簡単です。 このオプションでは、Hosted Graphiteアドオンとエージェントを組み合わせて使用し、エージェントがデフォルトのGrafanaダッシュボードにデータを自動的に入力するようにします。

通常、アドオンを使用すると、ボタンをクリックするだけでサードパーティのサービスからデータを取得できます。 また、サンプルダッシュボードのセットを生成するものもあるため、詳細なダッシュボードで必要な情報を数分で確認できます。

アドオンは、Graphiteエージェントによってエクスポートされた基本システムメトリックのダッシュボードを提供します。 MetricFireダッシュボードで、[Add on]セクションに移動し、[Hosted Graphite Agent（Base）]オプションをクリックして、このアドオンを有効にします。 「Regenerate dashboard」ボタンをクリックして、このアドオンでGrafanaを構成します。 Grafanaダッシュボードを再生成しようとすると、次のメッセージが表示される場合があります。

```
This will create/overwrite a dashboard in Grafana called Hosted Graphite Agent (Base). Are you sure?
```

上記の方法ですべて準備ができました。 メトリックを送信するシステムにエージェントをインストールするコマンドが表示され、提供されたコマンドを実行すると、システムはMetricFireへのデータの送信を開始します。 システム/サーバーでどのように構成されているかを正確に確認したい場合は、次のサービスのステータスを確認してください。

```
sudo systemctl status hg-agent
```

hg-agentがサーバー上で実行されている限り、それはMetricFireダッシュボードにデータが供給され始めます。

それでは、メトリクスを送る違う方法をチェックしていきましょう。

#StatsDまたはcollectdを使用してメトリックを送信する

CollectedとStatsDは、メトリックデータの送信に使用される2つのよく知られたツールです。それらは本質的に類似していますが、送信するデータのタイプによって異なります。 Collectdは、システム関連のメトリック（CPU、メモリ、ディスクなど）を収集および送信するために使用され、StatsDは、アプリケーション関連の統計を送信するために使用されます。

どちらもデーモンプロセスを使用して実行されます。それらはバックグラウンドで実行され続け、メトリックを収集してMetricFireダッシュボードに送信するジョブを処理します。 StatsDはNode.jsで記述され、collectdはC言語を使用して開発されていますが、MetricFireとの統合プロセスはほとんど同じです。

メトリックを外部システムに送信するには、特定の形式に従う必要があります。 StatsDは、多数のメトリックタイプを持つのに十分豊富です。 StatsDの最も一般的なメトリックタイプは、ゲージ、カウンター、タイマー、ヒストグラム、メーター、およびセットです。これは、MetricFireへの接続を設定した後に機能します。詳細については、[こちら](https://www.metricfire.com/blog/statsd-gauges-counters-and-timers-on-metricfire)をご覧ください。

両方を統合するのは非常に簡単です。 MetricFireアカウントにログインし、アドオンセクションに移動すると、「Datasource add-on」セクションの下にStatsDとcollectdの両方で使用できるアドオンが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a436e844-204f-f2f4-2d9e-ba670db512f5.png)

アドオンを有効にすると、重要な使用上の注意が表示されます。 StatsDを使用するようにシステムを構成するときのために、この情報を保持してください。

例：アカウントでStatsDが有効になっている

- StatsD形式のデータをstatsd.hostedgraphite.com:8125に送信します
- Hosted Graphite APIキー（XXXXXXXXXXXXXXXXXX）でデータのプレフィックスを付けます。
- ほとんどのクライアントは、「プレフィックス」または「名前空間」オプションを受け入れて、APIキーを含めることができます。

StatsDを有効にすると、収集して送信するメトリックの計画を開始できます。 このチュートリアルに従うと、この情報を使用してGrafanaダッシュボードを設定できるようになります。

#Prometheusのセットアップ
Prometheusは、強力なオープンソースのメトリック収集およびストレージシステムです。 システムとユーザー定義のメトリックを収集し、スケーラブルな時系列データベースに保存します。 時間の経過とともに大きな人気を博し、非常に人気のあるクラウドコンピューティングおよびソフトウェアエンジニアリング企業に採用されています。

データ収集と時系列データベースとしてPrometheusを作ったならば、MetricFireはそのユーザーを強力に手助けすることができます。 データを収集してMetricFireインスタンスに送信するようにPrometheusを設定し、Prometheusでエクスポートプラグインを有効にすることで、Prometheusの機能を拡張できます。

例）
- Node exporter
- Blackbox_exporter
- Mysqld_exporter
- Rabbitmq_exporter
- Nginx-vts-exporter

Prometheusはここ数年大規模に機能してきましたが、まだ不足している機能がいくつかあり、その1つはTLSのサポートです。 TLS暗号化を有効にする必要がある場合は、Prometheusの前にプロキシツールを設定する必要があります。

Prometheusをインストールして構成する方法は3つあります。 Prometheusの公式ドキュメントに記載されているソースインストール方法を使用するか、システムパッケージマネージャーを使用してPrometheusをインストールする方法。そして、3番目のアプローチは、ドッキングされたPrometheusを利用することです。 Dockerhubで利用できる非常によくパックされたDockerイメージがありますが、この方法では、詳細を忘れると、不安定性やデータの永続性の問題が発生する可能性があります。

最も簡単なアプローチは、パッケージマネージャー（apt、snap、yumなど）を使用することです。これは、Ubuntuボックスで以下で行います。

完全に機能するPrometheusインスタンスを起動して実行するための手順は次のとおりです。まず、そのapt-keyをubuntuシステムに追加する必要があります。

```
GET https://s3-eu-west-1.amazonaws.com/deb.robustperception.io/41EFC99D.gpg | apt-key add -
```

更新を実行して、お気に入りのパッケージマネージャーが新しい変更を取得したことを確認します。

```
apt-get update
```

これは、デフォルトのコンポーネントと一緒にPrometheusをインストールするコマンドです。

```
apt-get install prometheus prometheus-node-exporter prometheus-pushgateway prometheus-alertmanager
```

Prometheusが稼働していることを確認します。

ブラウザを起動してhttp：// localhost：9090と入力すると、ブラウザにPrometheusWebインターフェイスが表示されます。 /etc/prometheus.ymlにある構成ファイルを使用してPrometheusのポート設定またはその他の重要なランタイムパラメーターを構成するか、同じファイルを後で使用できる新しいファイルにコピーして貼り付けることができます。

```
global:
    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

```

Prometheusを起動する前に、同じ構成ファイルで「remote_write」機能と「remote_read」機能を設定する必要があります。

```
# Settings related to the remote write feature.
remote_write:
  [ - &lt;remote_write&gt; ... ]
```

```
# Settings related to the remote read feature.
remote_read:
  [ - &lt;remote_read&gt; ... ]
```

MetricFireの特定のケースでは、ベアラートークンで次のリモートアドレスを使用する必要があります。

```
# Settings related to the remote write feature.
remote_write:
  - https://api.metricfire.com/write
  - bearer_token: &lt;YOUR BEARER TOKEN&gt;
```

```
# Settings related to the remote read feature.
remote_read:
  - https://api.metricfire.com/read
  - bearer_token: &lt;YOUR BEARER TOKEN&gt;
```

MetricFire Dashboard > Add-Ons > Prometheusに移動すると、トークンを取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a74183c2-8293-f69f-a771-032296bc5ccb.png)

最終的な構成は次のようになります。

```
global:
    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
```
```
remote_read:
  - url: https://api.metricfire.com/read
    bearer_token: &lt;YOUR BEARER TOKEN&gt;
```
```
remote_write:
  - url: https://api.metricfire.com/write
    bearer_token: &lt;YOUR BEARER TOKEN&gt;
```

YAMLファイルを保存します。

これで、作成した構成を使用してPrometheusを起動できます。

```
./prometheus --config.file=&lt;CONFIGURATION FILE&gt;
```

2番目のステップは、マシンメトリックのエクスポーターであるノードエクスポーターを実行することです。 ソースコードからPrometheusをインストールした場合は、「node_exporter」バイナリを使用する必要があります。 ただし、システムパッケージマネージャーを使用してインストールした場合は、名前が変わる可能性があります。 たとえば、Debianベースのシステムでprometheus-node-exporterを使用します。 Node Exporterが実行されたら、/ metricsエンドポイントでcURLコマンドを実行することにより、メトリックがエクスポートされていることを確認できます。

```
curl http://localhost:9100/metrics
```

マシンはMetricFireにメトリックを供給している必要があります。 このデータがダッシュボードに保存および集約されていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/985fbe31-2c8e-bc56-7c32-dd8812f01179.png)

#MetricFireへのデータ送信の保護
MetricFireへのデータ送信プロセスを保護する方法を見てみましょう。

###Hosted Graphiteエージェント
メトリックを安全に送信する最も簡単な方法は、HostedGraphiteエージェントを使用することです。 インストールされると、HTTPS経由でHosted Graphiteに自動的に転送されます。

プレーンテキストTCPやUDPカーボンフォーマットインターフェイスなどの他の方法をすでに使用している場合は、TCP overTLSおよびHTTPSを介して同じフォーマットでメトリックデータを送信し続けることができます。 次の段落では、いくつかの例を見ていきます。

**TTPSを使用してデータを安全に送信する**

この目的のために、cURLコマンドを使用して、MetricFireHTTPSエンドポイントを提供しましょう。

```
‍curl https://&lt;API_KEY&gt;@www.hostedgraphite.com/api/v1/sink --data-binary "metrics.tar"
```

（<API_KEY>をAPIキーに置き換える必要があります。）

     
お気づきかもしれませんが、このプロセスは、このチュートリアルの最初の部分で見たのと同じ単純なものです。 HTTPをHTTPSに置き換える必要があります。

**HTTPSの代替：TCP over TLS**

HTTPS通信にはオーバーヘッドが伴い、TCP overTLSは次のレベルのセキュリティです。 TCPを選択した場合は、次のコマンドを使用してホストシステムを構成できます。

```
echo "API-KEY.metrics.tar" | ncat --ssl carbon.hostedgraphite.com 20030
```

MetricFireはポート20030でTCPover TLSエンドポイントを構成しているため、上記のコマンドでこの特定のポートを指定しました。

**検討できるその他のオプション（プロキシ、リレー、および非ブロッキングメトリック）**

もう1つのオプションは、プログラムのコードを変更せずに既存のサーバーにTLS暗号化機能を追加するように設計されたプロキシであるStunnelなどのツールを使用することです。 これは、TLS接続を管理するようにアプリケーションを構成したくない場合に役立ちます。

大事なことを言い忘れましたが、既存のGraphiteインフラストラクチャ用のカーボンリレーデーモンをすでに実行している場合は、既存のカーボンリレーを介してトラフィックを安全に転送することができます。

また、多数のサーバーからMetricFireにデータを送信する場合、TCPがブロックして同期している可能性があることに注意してください。 この場合、UDPを使用できます。 言語ガイドは、さまざまなプログラミング言語用にHTTP（S）、TCP、およびUDPを設定するのに役立ちます。

#まとめ
このチュートリアルでは、[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Sending%20metrics%20to%20MetricFire)サービスにデータを送信する方法について説明し、データ送信を保護する方法についても確認しました。 また、StatsD、collectd、およびPrometheusのインストールと構成の手順も確認しました。 MetricFireは、Grafana、Prometheus、Graphiteなどの高品質のオープンソーステクノロジーをバンドルしており、それらを使いやすく、保守しやすくしています。

メトリックの収集と視覚化の複雑なプロセスを簡単にして、コアビジネスに集中できるようにしました。

今すぐ無料トライアルを入手し、ここをクリックして開始してください。 また、[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Sending%20metrics%20to%20MetricFire)して、ビデオ通話でMetricFireチームに参加してください。 プラットフォームを最大限に活用できるよう、ユーザーをサポートできることを常に嬉しく思います。