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.
はじめに
IoTデバイスを監視することで、使用パターン、環境条件、ユーザーの行動に関する洞察を得ることができます。この情報を活用することで、デバイスのパフォーマンスを最適化し、ユーザー体験を向上させ、より的確なサービスや製品を開発することが可能です。デバイスデータのパターンや傾向を分析することで、予知保全戦略を実施し、デバイスが故障する前に修理や交換のスケジュールを立てることができ、ダウンタイムとメンテナンスコストの削減につながります。
この記事では、メトリクスをMQTTブローカーに公開する方法、およびTelegrafエージェントを設定してこれらのメトリクスを受信し、データソースに転送する方法について詳しく説明します。
MQTTブローカーの実行
すでにブローカーを使用している場合もあるかもしれませんが、今回のテストでは、Mosquittoを使用します。これはEclipse Foundationによって開発されたオープンソースのMQTTブローカーです。軽量でセットアップが簡単であり、そのシンプルさと信頼性から広く利用されています。インストールして起動したら、テスト用のメトリクスをMosquittoにパブリッシュできます。
Mosquittoのインストール(macOS)
使用しているOSに対応したMosquittoのインストールドキュメントを参照してください。macOSの場合は次の通りです:
brew install mosquitto
brew services restart mosquitto
もう1つの優れたブローカーの選択肢として、HiveMQがあります。これはデータベース、クラウドサービス、他のMQTTブローカーなどへ出力するように設定できます。また、MetricFireのHosted Graphiteと連携できるため、本番環境レベルのIoTデバイス監視にも適しています。
Telegrafエージェントの開始
Telegrafは、InfluxDBを基盤としたプラグイン駆動型のサーバーエージェントで、データベース、システム、プロセス、デバイス、アプリケーションからメトリクスやイベントを収集・送信します。TelegrafはGoで書かれており、外部依存のない単一のバイナリとしてコンパイルされます。メモリ使用量は非常に小さく、多くのオペレーティングシステムに対応しています。また、多種多様なシステムパフォーマンスメトリクスを収集・転送するための便利な入力プラグイン・出力プラグインが多数用意されています。
Telegrafのインストール(macOS)
brew install telegraf
最新バージョンや他のOS(Ubuntu/Debian、RedHat/CentOS、Windows、Linuxバイナリ)のインストール方法については、Telegrafのドキュメントをご参照ください。
macOSでは、パッケージやファイルは通常 /usr/local/etc/ ディレクトリにインストールされます。
出力の設定
Telegrafは、Graphite、Kafka、InfluxDB、Prometheus、SQL、NoSQLなど、さまざまな出力先に設定することができます。
この例では、Graphiteへの出力を設定します。もし自分でデータソースをホスティングしていない場合は、次の手順に従うために、MetricFireのHosted Graphiteの無料トライアルを開始できます。
Hosted Graphiteアカウントでは、データソースの提供に加え、アラート機能や可視化ツールとしてのHosted Grafanaも利用できます。
Graphiteの出力を設定するには、ダウンロードしたTelegrafの設定ファイル(~/usr/local/etc/telegraf/telegraf.conf)を探し、お好みのテキストエディタで開きます。その後、ファイルに以下の変更を加える必要があります
次の行を見つけてコメントアウトします:
# [[outputs.influxdb]]
次の行のコメントを外します:
[[outputs.graphite]]
serverの行のコメントを外して、以下のように編集します:
servers = ["carbon.hostedgraphite.com:2003"]
最後に、prefixの行のコメントを外して以下のように編集します:
prefix = "<YOUR_API_KEY>.telegraf"
または、別のデータソースへメトリクスを送信するように、別のTelegraf出力を設定することも可能です。
TelegrafのMQTTコンシューマプラグインの設定
Telegrafには、多くの一般的な技術やサードパーティソースから幅広いデータを収集できる入力プラグインが多数用意されています。この例では、Telegrafを設定して、Mosquittoで公開されているトピックを監視する方法を説明します。
必要なのは、telegraf.confファイル内で inputs.mqtt_consumer セクションを検索し、[[inputs.mqtt_consumer]] の行のコメントを外し、serversの行(デフォルトではlocalhostの1883ポート)も有効化することです:
[[inputs.mqtt_consumer]]
servers = ["tcp://127.0.0.1:1883"]
次に、MQTTブローカーから受信するトピック(topic)を定義し、データ形式(data_format)をGraphiteとして指定します:
topics = [
"topic/state",
"topic/sensor",
"topic/uptime",
"unique-device-metric"
]
data_format = "graphite"
ファイルを保存し、Telegrafを実行すると、Mosquitto(または他のMQTTブローカー)を監視できます。以下のコマンドは、Telegrafをサーバーのように実行し、出力に設定エラーがないかを確認できます:
telegraf --config telegraf.conf
次に、別のターミナルウィンドウを開いて、Mosquittoにメトリクスをパブリッシュします(これらはGraphite形式の metric.name <数値> です):
mosquitto_pub -t topic/sensor -m "mosquitto.sensor 2.2"
mosquitto_pub -t topic/state -m "mosquitto.state 4.4"
mosquitto_pub -t topic/uptime -m "mosquitto.uptime 6.6"
mosquitto_pub -t unique-device-metric -m "mosquitto.unique 8.8"
Telegrafはこれら4つのメトリクスを監視し、データソースへ転送します。Graphite形式では次のように表示されます:
telegraf.<host-name>.topic-sensor.mosquitto.sensor
telegraf.<host-name>.topic-state.mosquitto.state
telegraf.<host-name>.topic-uptime.mosquitto.uptime
telegraf.<host-name>.unique-device-metric.mosquitto.unique
追加の設定オプションについては、mqtt_consumerプラグインの公式GitHubリポジトリを参照してください。
MetricFireのHosted Graphiteを使用してカスタムダッシュボードとアラートを作成
MetricFireは、サーバー、データベース、ネットワーク、デバイス、アプリケーションからメトリクスやデータを収集・可視化・分析できる監視プラットフォームです。これを利用することで、インフラ内の問題を容易に特定し、リソースを最適化することができます。Hosted Graphiteは、監視基盤を自分でホスティングする負担を取り除き、より重要な作業に時間と自由を割くことを可能にします。
Hosted Graphiteのアカウントに登録し、上記の手順でTelegraf Agentを使ってサーバーを設定すると、メトリクスはHosted Graphiteのバックエンドへ転送され、タイムスタンプが付与され、集約されます。
- メトリクスは次のGraphite形式で送信・保存されます:metric.name.path <数値> <unixタイムスタンプ>
- ドット表記の形式はツリー状のデータ構造を提供し、効率的なクエリを可能にします。
- メトリクスはHosted Graphiteアカウント内に2年間保存され、それらを利用してカスタムアラートやGrafanaダッシュボードを作成できます。
Hosted GraphiteのHosted Grafanaでダッシュボードを作成
Hosted GraphiteのUIで、Dashboards ⇒ Primary Dashboards に移動し、「+」ボタンを選択して新しいパネルを作成します。
その後、クエリUIを使ってGraphiteのメトリクスパスを選択できます(Hosted Graphiteアカウント経由でGrafanaにアクセスしている場合、デフォルトのデータソースはHosted Graphiteのバックエンドになります)。
Hosted Graphiteのデータソースは、ワイルドカード(*)検索にも対応しており、指定したパスに一致するすべてのメトリクスを取得できます。さらに、Graphiteの関数をメトリクスクエリに適用したり、Grafana UI内でスタイル設定を行うことも可能です。
Grafanaには、さまざまな可視化オプション、表示のカスタマイズ、単位設定、さらにはダッシュボード変数やイベント注釈の設定といった高度な機能も用意されています。
詳細については、Hosted Graphiteのダッシュボードドキュメントを参照してください。
Graphiteアラートの作成
Hosted GraphiteのUIで、Alerts ⇒ Graphite Alerts に移動して新しいアラートを作成します。アラート名を設定し、アラート対象のメトリクスに対するクエリを追加し、このアラートの説明を記述します。
次に、Alert Criteria タブでしきい値を設定し、通知チャネルを選択します。デフォルトの通知チャネルは、Hosted Graphiteアカウント登録時に使用したメールアドレスです。さらに、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなど、さまざまな通知チャネルを簡単に設定することもできます。通知チャネルの詳細については、Hosted Graphiteのドキュメントをご参照ください。
まとめ
IoTデバイスの監視は、最適なパフォーマンスとセキュリティを確保するだけでなく、企業がより的確な意思決定を行い、運用効率を向上させ、IoTエコシステム全体の信頼性と寿命を高めることにもつながります。
インフラのさまざまなレイヤーを監視することで価値あるデータが得られ、ダッシュボードやアラートといったツールを活用することで、そのデータを補完できます。これにより、リアルタイムでの可視化、問題の事前検知、過去のトレンド分析、そして意思決定の支援が可能になります。これらはすべて、堅牢で効率的なインフラを維持するために不可欠です。
今すぐ無料トライアルに登録して、IoTデバイスの監視を実際に試してみましょう!また、デモを予約して、MetricFireのチームと直接、監視ニーズについてご相談いただくことも可能です。