玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

XNUMX 幎前、私たちはプロモヌション プロゞェクトのパむロット版を立ち䞊げたした。 電動スクヌタヌの分散レンタル.

圓初、このプロゞェクトは Road-To-Barcelona ず呌ばれおいたしたが、埌に Road-To-Berlin (したがっおスクリヌンショットでは R2B) になり、最終的には xRide ず呌ばれるようになりたした。

このプロゞェクトの䞻なアむデアは次のずおりです。集䞭型の車やスクヌタヌのレンタル サヌビス (キックスクヌタヌ/スクヌタヌではなく、スクヌタヌ、別名電動バむクに぀いお話しおいたす) の代わりに、分散型レンタルのプラットフォヌムを䜜りたいず考えおいたした。 私たちが遭遇した困難に぀いお すでに以前に曞いた.

圓初、プロゞェクトは自動車に焊点を圓おおいたしたが、期限、メヌカヌずの非垞に長いコミュニケヌション、および膚倧な数の安党制限のため、電動スクヌタヌがパむロットに遞ばれたした。

ナヌザヌは携垯電話に iOS たたは Android アプリケヌションをむンストヌルし、気に入ったスクヌタヌに近づきたした。その埌、携垯電話ずスクヌタヌがピアツヌピア接続を確立し、ETH が亀換され、ナヌザヌはスクヌタヌの電源をオンにしお乗り始めるこずができたした。電話。 旅行の終わりには、携垯電話䞊のナヌザヌのりォレットからむヌサリアムを䜿甚しお旅行代金を支払うこずも可胜でした。

スクヌタヌに加えお、ナヌザヌはアプリケヌションに「スマヌト充電噚」を衚瀺し、珟圚のバッテリヌが䜎䞋した堎合にナヌザヌが自分で亀換できるようになりたした。

これは、昚幎 XNUMX 月にドむツの XNUMX ぀の郜垂、ボンずベルリンで開始されたパむロット版の党䜓的な様子です。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

そしおある日、ボンで早朝に私たちのサポヌト チヌム (スクヌタヌを正垞に動䜜できる状態に維持するために珟堎に垞駐) に、スクヌタヌ XNUMX 台が跡圢もなく消えたずいう通報が入りたした。

どうやっお芋぀けお返すのですか

この蚘事ではこれに぀いお説明したすが、その前に、独自の IoT プラットフォヌムをどのように構築し、それをどのように監芖したかに぀いお説明したす。

スクヌタヌ、むンフラ、充電ステヌションなど、䜕を監芖する必芁がありたすか?たたその理由は䜕ですか?

では、プロゞェクトで䜕を監芖したかったのでしょうか?

たず第䞀に、これらはスクヌタヌ自䜓です。電動スクヌタヌ自䜓は非垞に高䟡なので、十分な準備ができおいないずそのようなプロゞェクトを立ち䞊げるこずはできたせん。可胜であれば、スクヌタヌに関するできるだけ倚くの情報 (堎所、充電レベルなど) を収集したいず考えおいたす。 、など。

さらに、デヌタベヌス、サヌビス、およびそれらが機胜するために必芁なものすべおなど、自瀟の IT むンフラストラクチャの状態を監芖したいず考えおいたす。 たた、「スマヌト充電噚」が故障したり、バッテリヌが切れたりした堎合に備えお、その状態を監芖する必芁もありたした。

原付

私たちのスクヌタヌずは䜕ですか?そしおそれに぀いお䜕を知りたかったのですか?

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

たず最も重芁なこずは GPS 座暙です。GPS 座暙のおかげで、私たちは圌らがどこにいるのか、どこを移動しおいるのかを理解できるからです。

次はバッテリヌの充電です。これにより、スクヌタヌの充電が終わりに近づいおいるこずを刀断しお、ゞュヌサヌを送信するか、少なくずもナヌザヌに譊告するこずができたす。

もちろん、ハヌドりェア コンポヌネントで䜕が起こっおいるかを確認するこずも必芁です。

  • ブルヌトゥヌスは機胜したすか
  • GPSモゞュヌル自䜓は機胜したすか
    • たた、GPS が誀った座暙を送信しおスタックする可胜性があるずいう問題も抱えおいたした。これはスクヌタヌの远加チェックによっおのみ刀断できたした。
      問題を解決するためにできるだけ早くサポヌトに通知しおください

そしお最埌に、OS ずプロセッサヌ、ネットワヌクずディスクの負荷から始たり、より具䜓的な独自のモゞュヌルのチェックで終わる゜フトりェアのチェックです (ホロコム, キヌクロヌク).

Hardware

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

私たちの「鉄」の郚分は䜕でしたか

可胜な限り短い時間枠ずラピッドプロトタむピングの必芁性を考慮しお、コンポヌネントの実装ず遞択に最も簡単なオプションである Raspberry Pi を遞択したした。
Rpi自䜓に加えお、カスタムボヌド最終゜リュヌションの組み立おプロセスをスピヌドアップするために私たち自身が開発しお䞭囜に泚文したしたずコンポヌネントのセットスクヌタヌのオン/オフを切り替えるためのリレヌがありたした。バッテリヌ充電リヌダヌ、モデム、アンテナ。 これらすべおを専甚の「xRideボックス」にコンパクトにパッケヌゞしたした。

たた、ボックス党䜓が远加のモバむルバッテリヌから電力を䟛絊され、さらにそのモバむルバッテリヌがスクヌタヌのメむンバッテリヌから電力を䟛絊されおいるこずにも泚意しおください。

これにより、むグニッションキヌを「オフ」䜍眮にするずすぐにメむンバッテリヌがオフになるため、旅行終了埌でもモニタリングを䜿甚しおスクヌタヌの電源を入れるこずが可胜になりたした。

ドッカヌ 普通の Linux ですか そしお展開

モニタリングの話に戻りたしょう。ラズベリヌには䜕があるでしょうか?

物理デバむスぞのコンポヌネントのデプロむ、曎新、配信のプロセスを高速化するために私たちが最初に䜿甚したいず考えおいたものの XNUMX ぀は、Docker でした。

残念ながら、RPi 䞊の Docker は機胜したすが、特に゚ネルギヌ消費の点で倚くのオヌバヌヘッドがあるこずがすぐに明らかになりたした。

「ネむティブ」OS を䜿甚した堎合の違いは、それほど匷力ではありたせんでしたが、充電が急速に倱われる可胜性に぀いお譊戒するには十分でした。

XNUMX 番目の理由は、Go/C/C++ で曞かれおいないシステムの唯䞀のコンポヌネントである Node.js (原文どおり!) 䞊のパヌトナヌ ラむブラリの XNUMX ぀でした。

ラむブラリの䜜成者には、「ネむティブ」蚀語で実甚的なバヌゞョンを提䟛する時間がありたせんでした。

ノヌド自䜓が䜎パフォヌマンスのデバむスにずっお最も掗緎された゜リュヌションではないだけでなく、ラむブラリ自䜓も非垞に倚くのリ゜ヌスを消費しおいたした。

たずえ䜿いたくおも、Docker を䜿甚するずオヌバヌヘッドが倧きすぎるこずに気づきたした。 ネむティブ OS を優先し、その䞋で盎接動䜜するこずが遞択されたした。

OS

その結果、やはり OS ずしお最も単玔なオプションを遞択し、Raspbian (Pi 甚の Debian ビルド) を䜿甚したした。

私たちはすべおの゜フトりェアを Go で䜜成しおいるため、システム内のメむンのハヌドりェア ゚ヌゞェント モゞュヌルも Go で䜜成したした。

GPS、Bluetooth の操䜜、充電量の読み取り、スクヌタヌの電源投入などを担圓するのは圌です。

展開する

デバむスに曎新を配信するためのメカニズム (OTA) を実装する必芁性に぀いおの疑問がすぐに生じたした。゚ヌゞェント/アプリケヌション自䜓の曎新ず、OS/ファヌムりェア自䜓の曎新の䞡方です (゚ヌゞェントの新しいバヌゞョンではカヌネルの曎新が必芁になる可胜性があるため)たたはシステムコンポヌネント、ラむブラリなど。

垂堎をかなり長い間分析した結果、デバむスにアップデヌトを配信するための゜リュヌションが非垞にたくさんあるこずがわかりたした。

swupd/SWUpdate/OSTree などの比范的単玔で䞻に曎新/デュアルブヌト指向のナヌティリティから、Mender や Balena などの本栌的なプラットフォヌムたで。

たず第䞀に、私たちぱンドツヌ゚ンドの゜リュヌションに興味があるず刀断したため、すぐにプラットフォヌムを遞択するこずになりたした。

自䜓 バレナ は、balenaEngine 内で実際に同じ Docker を䜿甚しおいるずいう事実により陀倖されたした。

しかし、それにもかかわらず、私たちは最終的に圌らの補品を䜿い続けるこずになったこずに泚意しおください。 バリヌナ゚ッチャヌ SD カヌド䞊のフラッシュ ファヌムりェア甚 - シンプルで非垞に䟿利なナヌティリティです。

ずいうこずで、最終的に遞んだのは、 修理人。 Mender は、ファヌムりェアを組み立お、配信し、むンストヌルするための完党なプラットフォヌムです。

党䜓的にプラットフォヌムは玠晎らしく芋えたすが、Mender Builder を䜿甚しお正しいバヌゞョンのファヌムりェアを構築するだけで玄 XNUMX 週間半かかりたした。
そしお、その䜿甚方法の耇雑さに没頭すればするほど、それを完党に導入するには、これたでよりもはるかに倚くの時間が必芁であるこずが明らかになりたした。

悲しいこずに、締め切りが厳しかったため、Mender の䜿甚を攟棄し、よりシンプルなものを遞択せざるを埗なくなりたした。

Ansible

私たちの状況における最も簡単な解決策は、Ansible を䜿甚するこずでした。 始めるには、いく぀かのプレむブックで十分でした。

その本質は、単にホスト (CI サヌバヌ) から ssh 経由でラズベリヌに接続し、曎新を配垃するずいうこずでした。

圓初はすべおが単玔でした。デバむスず同じネットワヌク䞊にある必芁があり、泚ぐのは Wi-Fi 経由で行われたした。

オフィスには、単玔に XNUMX 台のテスト甚ラズベリヌが同じネットワヌクに接続されおおり、各デバむスには Ansible Inventory でも指定された静的 IP アドレスがありたした。

監芖゚ヌゞェントを゚ンドデバむスに配信したのは Ansible でした

3G / LTE

残念ながら、Ansible のこのナヌスケヌスは、実際のスクヌタヌが登堎する前は開発モヌドでのみ動䜜できたした。

ご存知のずおり、スクヌタヌは XNUMX 台の Wi-Fi ルヌタヌに接続されおおらず、ネットワヌク䞊の曎新を垞に埅機しおいるためです。

実際には、スクヌタヌはモバむル 3G/LTE 以倖にはたったく接続できたせん (そしお、垞に接続できるわけではありたせん)。

これにより、接続速床が遅くなったり、通信が䞍安定になったりするなど、すぐに倚くの問題や制限が生じたす。

しかし、最も重芁なこずは、3G/LTE ネットワヌクでは、ネットワヌクに割り圓おられた静的 IP に単玔に䟝存するこずはできないずいうこずです。

この問題は䞀郚の SIM カヌド プロバむダヌによっお郚分的に解決されおおり、静的 IP アドレスを持぀ IoT デバむス甚に蚭蚈された特別な SIM カヌドもありたす。 しかし、私たちはそのような SIM カヌドにアクセスできず、IP アドレスを䜿甚できたせんでした。

もちろん、Consul のような堎所で IP アドレスの登録、぀たりサヌビス怜出を行うずいうアむデアもありたしたが、テストでは IP アドレスが頻繁に倉曎される可胜性があり、非垞に䞍安定になる可胜性があったため、そのようなアむデアは攟棄しなければなりたせんでした。

このため、メトリクスを配信するための最も䟿利な䜿甚法は、必芁なメトリクスを取埗するためにデバむスにアクセスするプル モデルを䜿甚するのではなく、デバむスからサヌバヌにメトリクスを盎接配信するプッシュ型モデルを䜿甚するこずになりたす。

VPN

この問題の解決策ずしお、私たちは VPN を遞択したした。 ワむダヌガヌド.

システム起動時のクラむアントスクヌタヌはVPNサヌバヌに接続し、接続するこずができたした。 このトンネルは曎新を配信するために䜿甚されたした。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

理論的には、同じトンネルをモニタリングに䜿甚できたすが、そのような接続は単玔なプッシュよりも耇雑で信頌性が䜎くなりたす。

クラりドリ゜ヌス

最埌に、クラりド サヌビスずデヌタベヌスには Kubernetes を䜿甚しおいるため、それらを監芖する必芁がありたす。これにより、クラスタヌ内での監芖の展開ができるだけ簡単になるこずが理想的です。 理想的には、 ヘルメット、デプロむメントの堎合、ほずんどの堎合それを䜿甚するためです。 そしおもちろん、クラりドを監芖するには、スクヌタヌ自䜓ず同じ゜リュヌションを䜿甚する必芁がありたす。

䞎えられた

ふう、説明は敎理できたようです。最埌に必芁なもののリストを䜜成したしょう。

  • 開発プロセス䞭にすでにモニタリングが必芁であるため、迅速な解決策
  • ボリュヌム/数量 - 倚くの指暙が必芁
  • ログ収集が必芁です
  • 信頌性 - 立ち䞊げを成功させるにはデヌタが重芁です
  • プルモデルは䜿甚できたせん - プッシュが必芁です
  • ハヌドりェアだけでなくクラりドも䞀元的に監芖する必芁がある

最終的なむメヌゞはこんな感じになりたした

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

スタックの遞択

そこで、監芖スタックの遞択ずいう問題に盎面したした。

たず最初に、すべおの芁件を同時にカバヌし、同時にニヌズに合わせお䜿甚​​方法を調敎できる柔軟性を備えた、最も完党なオヌルむンワン ゜リュヌションを探しおいたした。 それでも、ハヌドりェア、アヌキテクチャ、期限によっお倚くの制限が課せられおいたした。

のような本栌的なシステムをはじめ、監芖゜リュヌションは倚皮倚様です。 Nagios, アむシング たたは ザビックス そしお最埌に、フリヌト管理のための既補の゜リュヌションで終わりたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

圓初、埌者は私たちにずっお理想的な゜リュヌションのように思えたしたが、完党な監芖ができないものもあれば、無料版の機胜が倧幅に制限されおいるものもあり、単に私たちの「芁望」をカバヌできなかったり、シナリオに適合するほど柔軟性がなかったりするものもありたした。 単に時代遅れになっおいるものもありたす。

倚数の同様の゜リュヌションを分析した結果、同様のスタックを自分で組み立おる方が簡単か぀迅速であるずいう結論にすぐに達したした。 はい、完党に既補のフリヌト管理プラットフォヌムを導入するよりも少し耇雑になりたすが、劥協する必芁はありたせん。

ほが確実に、膚倧な数の゜リュヌションの䞭に、私たちに完党に適合する既補の゜リュヌションがすでに存圚したすが、私たちの堎合は、特定のスタックを自分で組み立おお「自分甚に」カスタマむズするほうがはるかに高速でした。既補品のテスト。

これらすべおを考慮しお、私たちは監芖プラットフォヌム党䜓を自分たちで組み立おようずはせず、柔軟に構成できる機胜を備えた、最も機胜的な「既補」スタックを探しおいたした。

(B)゚ルク?

実際に怜蚎された最初の゜リュヌションは、よく知られた ELK スタックでした。
すべおは Beats から始たるので、実際には BELK ず呌ぶべきです。 - https://www.elastic.co/what-is/elk-stack

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

もちろん、ELK は監芖の分野で最も有名で匷力な゜リュヌションの XNUMX ぀であり、ログの収集ず凊理の分野ではさらに重芁です。

私たちは、ELK をログの収集ず、Prometheus から取埗したメトリクスの長期保存に䜿甚するこずを意図しおいたした。

芖芚化には Grafan を䜿甚できたす。

実際、新しい ELK スタックはメトリクスを独立しお収集でき (metricbeat)、Kibana はメトリクスを衚瀺するこずもできたす。

しかしそれでも、ELK は圓初ログから成長したため、これたでのずころメトリクスの機胜には倚くの重倧な欠点がありたす。

  • プロメテりスよりも倧幅に遅い
  • プロメテりスよりもはるかに少ない堎所に統合されたす
  • アラヌトを蚭定するのは難しい
  • メトリクスは倚くのスペヌスを占有したす
  • Kiban でのメトリクスを䜿甚したダッシュボヌドの蚭定は、Grafan よりもはるかに耇雑です

䞀般に、ELK のメトリクスは重く、他の゜リュヌションほど䟿利ではありたせん。珟圚、そのメトリクスには Prometheus だけでなく、TSDB、Victoria Metrics、Cortex などがありたす。 もちろん、本栌的なオヌルむンワン゜リュヌションをすぐにでも実珟したいのですが、metricbeat の堎合は劥協が倚すぎたした。

そしお、ELK スタック自䜓にもいく぀かの困難な瞬間がありたす。

  • かなり倧量のデヌタを収集するず重くなり、堎合によっおは非垞に重くなるこずもありたす
  • それを「調理する方法を知る」必芁がありたす - スケヌルを調敎する必芁がありたすが、これを行うのは簡単ではありたせん
  • 必芁なものを取り陀いた無料バヌゞョン - 無料バヌゞョンには通垞のアラヌトがなく、遞択時に認蚌がありたせんでした。

最近、最埌の点が良くなっおきおいるず蚀わざるを埗たせん。 オヌプン゜ヌス X-pack での出力 (認蚌を含む) 䟡栌モデル自䜓が倉わり始めたした。

しかし、この゜リュヌションを導入しようずした時点では、アラヌトはたったくありたせんでした。
おそらく、ElastAlert や他のコミュニティ ゜リュヌションを䜿甚しお䜕かを構築しようずするこずもできたしたが、それでも他の代替案を怜蚎するこずにしたした。

ロキ - グラファナ - プロメテりス

珟時点では、良い解決策は、メトリクス プロバむダヌずしお Prometheus、ログ甚に Loki、芖芚化には同じ Grafana を䜿甚するこずのみに基づいた監芖スタックを構築するこずです。

残念ながら、プロゞェクトの販売パむロット開始時点19幎0.3月0.4月では、Lokiはただベヌタ版XNUMXXNUMXであり、開発開始時点では補品版の゜リュヌションずしお考慮するこずができたせんでした。党然。

私は本栌的なプロゞェクトで実際に Loki を䜿甚した経隓はただありたせんが、Promtail (ログ収集゚ヌゞェント) は、Kubernetes のベアメタルずポッドの䞡方でうたく機胜するず蚀えたす。

ティック

おそらく、ELK スタックに代わる最も䟡倀のある (唯䞀の?) フル機胜の代替品は、珟圚、TICK スタック (Telegraf、InfluxDB、Chronograf、Kapacitor) ずしか呌ばれたせん。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

以䞋ですべおのコンポヌネントに぀いお詳しく説明したすが、䞀般的な考え方は次のずおりです。

  • Telegraf - メトリクスを収集する゚ヌゞェント
  • InfluxDB - メトリクス デヌタベヌス
  • Kapacitor - アラヌト甚のリアルタむム メトリクス プロセッサ
  • Chronograf - 芖芚化のための Web パネル

InfluxDB、Kapacitor、および Chronograf に぀いおは、それらをデプロむするために䜿甚した公匏の Helm チャヌトがありたす。

Influx 2.0 (ベヌタ版) の最新バヌゞョンでは、Kapacitor ず Chronograf が InfluxDB の䞀郚ずなり、個別に存圚しなくなったこずに泚意しおください。

テレグラフ

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

テレグラフ は、ステヌト マシンでメトリクスを収集するための非垞に軜量の゚ヌゞェントです。

圌はあらゆるものを倧量に監芖できたす。 nginx ЎП
サヌバヌ minecraft.

これには倚くの優れた利点がありたす。

  • 高速か぀軜量 (Go で曞かれおいる)
    • 最小限のリ゜ヌスを消費したす
  • デフォルトでメトリクスをプッシュする
  • 必芁なすべおのメトリクスを収集したす
    • 蚭定なしのシステムメトリクス
    • センサヌからの情報などのハヌドりェアメトリクス
    • 独自のメトリクスを远加するのは非垞に簡単です
  • すぐに䜿える豊富なプラグむン
  • ログを収集したす

私たちにずっおプッシュ メトリクスは必芁であったため、その他の利点はすべお楜しい远加以䞊のものでした。

゚ヌゞェント自䜓によるログの収集も、ログを蚘録するために远加のナヌティリティを接続する必芁がないため、非垞に䟿利です。

Influx は、次の堎合にログを操䜜するための最も䟿利な゚クスペリ゚ンスを提䟛したす。 syslog.

Telegraf は、ICK スタックの残りの郚分を䜿甚しない堎合でも、䞀般にメトリクスを収集するための優れた゚ヌゞェントです。

ほずんどどこにでもメトリクスを曞き蟌むこずができるため、倚くの人が利䟿性のために ELK やその他のさたざたな時系列デヌタベヌスず組み合わせおいたす。

流入DB

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

InfluxDB は TICK スタックの䞻芁なコア、぀たりメトリクスの時系列デヌタベヌスです。
メトリクスに加えお、Influx はログも保存できたす。ただし、本質的に、Influx のログはメトリクスずたったく同じですが、通垞の数倀むンゞケヌタの代わりに、䞻な機胜がログ テキストの行によっお実行されるだけです。

InfluxDB も Go で曞かれおおり、(最も匷力ではない) クラスタヌ䞊の ELK ず比范しおはるかに高速に動䜜するようです。

Influx の優れた利点の XNUMX ぀は、デヌタ ク゚リ甚の非垞に䟿利で豊富な API も含たれおおり、私たちはこれを非垞に積極的に䜿甚したした。

欠点 - $$$ たたはスケヌリング?

TICK スタックには、私たちが発芋した欠点が XNUMX ぀だけありたす。 ダヌリン。 さらに。

有料版にあっお無料版にはないものは䜕ですか?

私たちが理解できる限り、TICK スタックの有料バヌゞョンず無料バヌゞョンの唯䞀の違いはスケヌリング機胜です。

぀たり、高可甚性を備えたクラスタヌを構築できるのは、 ゚ンタヌプラむズ版.

本栌的な HA が必芁な堎合は、料金を支払うか、束葉杖を䜿甚する必芁がありたす。 コミュニティ ゜リュヌションがいく぀かありたす。たずえば、 influxdb-ha 有胜な゜リュヌションのように芋えたすが、本番環境には適しおいないこずが曞かれおいたす。
流入口 - NATS を介しおデヌタをポンピングするシンプルな゜リュヌション (拡匵する必芁もありたすが、これは解決できたす)。

残念ですが、䞡方ずも攟棄されたようです。新しいコミットはありたせん。問題は、倚くの点が異なる Influx 2.0 の新しいバヌゞョンの近日リリヌスが予定されおいるためだず思いたす (情報はありたせん)ただスケヌリング䞭です。

公匏には無料版がありたす リレヌ - 実際、これは原始的な HA ですが、バランスをずるこずによっおのみ、
すべおのデヌタはロヌド バランサヌの背埌にあるすべおの InfluxDB むンスタンスに曞き蟌たれるためです。
圌はいく぀か持っおいたす 制限 ポむントの䞊曞きに関する朜圚的な問題や、事前にメトリクスのベヌスを䜜成する必芁性など
(これは InfluxDB の通垞の䜜業䞭に自動的に行われたす)。

そのほか シャヌディングはサポヌトされおいたせんこれは、必芁のない重耇メトリクス (凊理ずストレヌゞの䞡方) のための远加のオヌバヌヘッドを意味したすが、それらを分離する方法はありたせん。

ビクトリアメトリクス?

その結果、有料スケヌリング以倖のすべおにおいお TICK スタックに完党に満足しおいたにもかかわらず、残りの T_CK コンポヌネントを残したたた、InfluxDB デヌタベヌスを眮き換えるこずができる無料の゜リュヌションがないかどうかを確認するこずにしたした。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

時系列デヌタベヌスは数倚くありたすが、最も有望なものは Victoria Metrics です。これには倚くの利点がありたす。

  • 少なくずも結果によれば、速くお簡単 ベンチマヌク
  • クラスタヌバヌゞョンがあり、珟圚では良いレビュヌもありたす
    • 圌女はシャヌドできる
  • InfluxDBプロトコルをサポヌト

私たちは Victoria をベヌスにした完党なカスタム スタックを構築する぀もりはなく、InfluxDB のドロップむン代替品ずしお䜿甚できるこずが䞻な垌望でした。

残念ながら、InfluxDB プロトコルがサポヌトされおいるにもかかわらず、これは䞍可胜です。InfluxDB プロトコルはメトリクスの蚘録にのみ機胜したす。「倖郚」で利甚できるのは Prometheus API のみです。぀たり、それに Chronograf を蚭定するこずはできたせん。

さらに、メトリクスでは数倀のみがサポヌトされおいたす (カスタム メトリクスには文字列倀を䜿甚したした - 詳现に぀いおはセクションで説明したす) 管理パネル).

明らかに、同じ理由で、VM は Influx のようにログを保存できたせん。

たた、最適な゜リュヌションを探しおいた時点では、Victoria Metrics はただそれほど普及しおおらず、ドキュメントがはるかに小さく、機胜も匱かったこずにも泚意しおください。
(クラスタヌのバヌゞョンずシャヌディングの詳现な説明は芚えおいたせん)。

ベヌスの遞択

その結果、パむロットでは匕き続き単䞀の InfluxDB ノヌドに制限するこずが決定されたした。

この遞択には䞻な理由がいく぀かありたした。

  • TICK スタックの機胜党䜓がずおも気に入りたした
  • すでに導入に成功しおおり、うたくいきたした
  • 締め切りは迫っおおり、他のオプションをテストする時間はあたり残されおいたせんでした。
  • これほど重い負荷は予想しおいたせんでした

パむロットの最初のフェヌズでは倚くのスクヌタヌがありたせんでしたが、開発䞭のテストではパフォヌマンスの問題は明らかになりたせんでした。

したがっお、このプロゞェクトでは、スケヌリングの必芁がなく、XNUMX ぀の Influx ノヌドで十分であるず刀断したした (最埌の結論を参照)。

スタックずベヌスを決定したした。次に、TICK スタックの残りのコンポヌネントに぀いお説明したす。

コンデンサ

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

Kapacitor は、デヌタベヌスに入力されるメトリクスをリアルタむムで監芖し、ルヌルに基づいおさたざたなアクションを実行できるサヌビスである TICK スタックの䞀郚です。

䞀般に、これは朜圚的な異垞远跡ず機械孊習のためのツヌルずしお䜍眮付けられおいたすが (これらの機胜が需芁があるかどうかはわかりたせん)、最も䞀般的な䜿甚䟋は、より䞀般的なアラヌトです。

それが通知に䜿甚する方法です。 特定のスクヌタヌがオフラむンになったずきに Slack アラヌトを蚭定し、スマヌト充電噚や重芁なむンフラストラクチャ コンポヌネントに察しおも同じこずを行いたした。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

これにより、問題に迅速に察応できるだけでなく、すべおが正垞に戻ったずいう通知を受け取るこずが可胜になりたした。

簡単な䟋: 「ボックス」に電力を䟛絊する远加のバッテリヌが故障したか、䜕らかの理由で電力が切れた堎合、新しいバッテリヌを取り付けるだけで、しばらくするずスクヌタヌの機胜が回埩したずいう通知を受け取るこずができたす。

Influx 2.0 では、Kapacitor が DB の䞀郚になりたした

クロノグラフ

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

これたでさたざたな監芖 UI ゜リュヌションを芋おきたしたが、機胜ず UX の点で Chronograf に匹敵するものはないず蚀えたす。

奇劙なこずに、Web むンタヌフェむスずしお Grafan を䜿甚しお TICK スタックの䜿甚を開始したした。
その機胜に぀いおは説明したせんが、あらゆるものをカスタマむズできる幅広い可胜性は誰もが知っおいたす。

ただし、Grafana は䟝然ずしお完党に汎甚的な機噚ですが、Chronograf は䞻に Influx で䜿甚するために蚭蚈されおいたす。

そしおもちろん、このおかげで、クロノグラフはさらに賢くお䟿利な機胜を搭茉できるようになりたした。

おそらく、Chronograf を䜿甚する䞻な䟿利な点は、Explore を通じお InfluxDB の内郚を衚瀺できるこずです。

Grafana にはほが同じ機胜があるように芋えたすが、実際には、Chronograf でのダッシュボヌドのセットアップはマりスを数回クリックするだけで (同時に芖芚化を確認しながら) 行うこずができたすが、Grafana では遅かれ早かれ、 JSON 蚭定を線集したす (もちろん、Chronograf では、手動で蚭定したダシャをアップロヌドし、必芁に応じお JSON ずしお線集できたす。ただし、UI で䜜成した埌にそれらを操䜜する必芁はありたせんでした)。

Kibana には、ダッシュボヌドずそのコントロヌルを䜜成するためのより豊富な機胜がありたすが、そのような操䜜の UX は非垞に耇雑です。

䟿利なダッシュボヌドを䜜成するには、ある皋床の理解が必芁です。 たた、Chronograf ダッシュボヌドの機胜は少ないものの、䜜成ずカスタマむズははるかに簡単です。

ダッシュボヌド自䜓は、快適なビゞュアル スタむルを陀けば、実際には Grafana や Kibana のダッシュボヌドず䜕ら倉わりたせん。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

ク゚リ りィンドりは次のようになりたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

ずりわけ、InfluxDB デヌタベヌス内のフィヌルドのタむプを知るず、クロノグラフ自䜓がク゚リの䜜成や平均倀などの正しい集蚈関数の遞択に自動的に圹立぀堎合があるこずに泚意するこずが重芁です。

そしおもちろん、Chronograf はログを衚瀺するのに可胜な限り䟿利です。 次のようになりたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

デフォルトでは、Influx ログは syslog を䜿甚するように調敎されおいるため、重倧床ずいう重芁なパラメヌタがありたす。

䞊郚のグラフは特に䟿利で、発生した゚ラヌが衚瀺され、重倧床が高いかどうかが色ですぐにわかりたす。

この方法で重芁なバグを䜕床か捕捉し、先週のログを衚瀺しお赀いスパむクを確認したした。

もちろん、このような゚ラヌに察するアラヌトを蚭定するのが理想的です。これに぀いおはすでにすべおが揃っおいるためです。

しばらくの間これをオンにしおいたしたが、パむロットの準備の過皋で、かなり倚くの゚ラヌ (LTE ネットワヌクが利甚できないなどのシステム゚ラヌを含む) が発生し、Slack チャネルにも「スパム」が発生しおいるこずが刀明したした。䜕も問題を匕き起こすこずもなく、倧きなメリットがありたす。

正しい解決策は、この皮の゚ラヌのほずんどを凊理し、重倧床を調敎しおからアラヌトを有効にするこずです。

こうするこずで、新しい゚ラヌたたは重芁な゚ラヌのみが Slack に投皿されたす。 厳しい締め切りを考えるず、そのようなセットアップを行うには十分な時間がありたせんでした。

認蚌

Chronograf が認蚌ずしお OAuth ず OIDC をサポヌトしおいるこずにも蚀及する䟡倀がありたす。

これは、サヌバヌに簡単に接続しお本栌的な SSO を䜜成できるため、非垞に䟿利です。

私たちの堎合、サヌバヌは キヌクロヌク — モニタリングに接続するために䜿甚されたしたが、スクヌタヌずバック゚ンドぞのリク゚ストの認蚌にも同じサヌバヌが䜿甚されたした。

「管理者」

最埌に説明するコンポヌネントは、Vue で独自に䜜成した「管理パネル」です。
基本的には、独自のデヌタベヌス、マむクロサヌビス、InfluxDB のメトリクス デヌタからのスクヌタヌ情報を同時に衚瀺する単なるスタンドアロン サヌビスです。

さらに、緊急の再起動やサポヌト チヌムのリモヌトによるロックの解陀など、倚くの管理機胜がそこに移動されたした。

地図もありたした。 Chronograf ではなく Grafana から始めたこずはすでに述べたした。Grafana ではマップがプラグむンの圢匏で利甚可胜であり、スクヌタヌの座暙を衚瀺できるからです。 残念ながら、Grafana のマップ りィゞェットの機胜は非垞に限られおいるため、珟時点での座暙を確認するだけでなく、スクヌタヌが通ったルヌト、地図䞊のデヌタをフィルタリングできるなど (単玔なダッシュボヌドでは構成できなかったすべおの機胜)。

すでに述べた Influx の利点の XNUMX ぀は、独自のメトリクスを簡単に䜜成できるこずです。
これにより、さたざたなシナリオでの䜿甚が可胜になりたす。

私たちは、バッテリヌ充電、ロック状態、センサヌのパフォヌマンス、Bluetooth、GPS、その他倚くのヘルスチェックなど、すべおの有甚な情報をそこに蚘録しようずしたした。
これらすべおを管理パネルに衚瀺したした。

もちろん、私たちにずっお最も重芁な基準はスクヌタヌの動䜜状態でした。実際、Influx 自䜓がこれをチェックし、ノヌド セクションに「青信号」で衚瀺したす。

これは関数によっお行われたす 死人 — これを䜿甚しおボックスのパフォヌマンスを理解し、同じアラヌトを Slack に送信したした。

ちなみに、私たちはスクヌタヌに『シンプ゜ンズ』の登堎人物の名前にちなんで名付けたした。お互いに区別するのにずおも䟿利でした。

そしお䞀般的には、こちらの方が楜しかったです。 「みんな、スミザヌズは死んだ」のようなフレヌズが絶えず聞かれたした。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

文字列メトリクス

Victoria Metrics の堎合のように、InfluxDB では数倀だけでなく保存できるこずが重芁です。

これはそれほど重芁ではないように思えたすが、結局のずころ、ログずは別に、あらゆるメトリクスを数倀の圢匏で保存できたす (既知の状態のマッピングを远加するだけです - 䞀皮の列挙型です)。

私たちの堎合、文字列メトリクスが非垞に圹立぀シナリオが少なくずも XNUMX ぀ありたした。
たたたた、圓瀟の「スマヌト充電噚」のサプラむダヌがサヌドパヌティであったため、開発プロセスずこれらの充電噚が提䟛できる情報を圓瀟は制埡できたせんでした。

結果ずしお、課金 API は理想からはほど遠いものになりたしたが、䞻な問題は、その状態を垞に把握できないこずでした。

ここでInfluxが助けになりたした。 受け取った文字列ステヌタスを倉曎せずに InfluxDB デヌタベヌス フィヌルドに曞き蟌むだけです。

しばらくの間は、「オンラむン」や「オフラむン」などの倀のみが取埗され、その情報に基づいお管理パネルに衚瀺され、通知が Slack に送信されたした。 しかし、い぀からかそこには「断絶」ずいった䟡倀芳も珟れ始めた。

埌で刀明したこずですが、このステヌタスは、䞀定回数詊行しおも充電噚がサヌバヌずの接続を確立できなかった堎合に、接続が倱われた埌に XNUMX 回送信されたものでした。

したがっお、固定の倀セットのみを䜿甚した堎合、適切なタむミングでファヌムりェアにこれらの倉曎が衚瀺されない可胜性がありたす。

たた、䞀般に、文字列メトリクスは䜿甚できる可胜性がはるかに高く、事実䞊あらゆる情報を文字列メトリクスに蚘録できたす。 もちろん、このツヌルを慎重に䜿甚する必芁もありたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

通垞のメトリクスに加えお、GPS 䜍眮情報も InfluxDB に蚘録したした。 これは、管理パネルでスクヌタヌの䜍眮を監芖するのに非垞に圹立ちたした。
実際、必芁なずきにどのスクヌタヌがどこにあるかを垞に知っおいたした。

これは、スクヌタヌを探しおいたずきに非垞に圹立ちたした (最埌に結論を参照)。

むンフラ監芖

スクヌタヌ自䜓に加えお、(かなり広範囲にわたる) むンフラストラクチャ党䜓を監芖する必芁もありたした。

非垞に䞀般的なアヌキテクチャは次のようになりたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

玔粋な監芖スタックを匷調衚瀺するず、次のようになりたす。

玛倱したスクヌタヌの返华、たたは XNUMX ぀の IoT 監芖の話

クラりド䞊で確認したいこずは次のずおりです。

  • デヌタベヌス
  • キヌクロヌク
  • マむクロサヌビス

すべおのクラりド サヌビスは Kubernetes に配眮されおいるため、その状態に関する情報を収集するずよいでしょう。

幞いなこずに、Telegraf はそのたたの状態で Kubernetes クラスタヌの状態に関する膚倧な数のメトリクスを収集でき、Chronograf はこれのための矎しいダッシュボヌドをすぐに提䟛したす。

䞻にポッドのパフォヌマンスずメモリ消費量を監芖したした。 転倒の堎合は、Slack でアラヌトが送信されたす。

Kubernetes でポッドを远跡するには、DaemonSet ず Sidecar の XNUMX ぀の方法がありたす。
どちらの方法も詳しく説明されおいたす このブログ投皿で.

Telegraf Sidecar を䜿甚し、メトリクスに加えおポッド ログを収集したした。

私たちの堎合、ログをいじる必芁がありたした。 Telegraf は Docker API からログを取埗できるずいう事実にもかかわらず、゚ンド デバむスでログを均䞀に収集したいず考え、そのためにコンテナ甚に syslog を構成したした。 おそらくこの゜リュヌションは矎しくありたせんでしたが、その動䜜に぀いおは䞍満はなく、ログは Chronograf で適切に衚瀺されたした。

モニタヌ監芖???

結局、監芖システムの監芖ずいう長幎の問題が浮䞊したしたが、幞か䞍幞か、これには十分な時間がありたせんでした。

ただし、Telegraf は独自のメトリクスを簡単に送信したり、InfluxDB デヌタベヌスからメトリクスを収集しお同じ Influx たたは別の堎所に送信したりできたす。

所芋

パむロットの結果からどのような結論が埗られたしたか?

モニタリングはどのように行うこずができたすか?

たず第䞀に、TICK スタックは私たちの期埅を完党に満たし、圓初の期埅よりもさらに倚くの機䌚を䞎えおくれたした。

必芁な機胜はすべお揃っおいたした。 私たちがそれを䜿っおやったこずはすべお問題なく動䜜したした。

ПрПОзвПЎОтельМПсть

無料版の TICK スタックの䞻な問題は、スケヌリング機胜が欠劂しおいるこずです。 これは私たちにずっお問題ではありたせんでした。

正確な負荷デヌタ/数倀は収集したせんでしたが、䞀床に玄 30 台のスクヌタヌからデヌタを収集したした。

それぞれが 10 を超えるメトリクスを収集したした。 同時に、デバむスからのログも収集されたした。 デヌタの収集ず送信は XNUMX 秒ごずに行われたした。

パむロットの 30 週間半埌、「子䟛時代の問題」の倧郚分は修正され、最も重芁な問題はすでに解決されおいたため、サヌバヌにデヌタを送信する頻床を枛らす必芁があったこずに泚意するこずが重芁です。 XNUMX秒。 LTE SIM カヌドのトラフィックがすぐになくなり始めたため、これが必芁になりたした。

トラフィックの倧郚分はログによっお消費され、メトリクス自䜓は、10 秒間隔であっおも実質的に無駄にはなりたせんでした。

その結果、䞀定の問題を継続的に収集しなくおも特定の問題がすでに明らかであったため、しばらくしおからデバむス䞊のログの収集を完党に無効にしたした。

堎合によっおは、それでもログの衚瀺が必芁な堎合は、VPN 経由で Wi​​reGuard 経由で接続するだけで枈みたした。

たた、それぞれの環境は互いに分離されおおり、䞊蚘の負荷は実皌働環境にのみ関連するものであるこずも付け加えおおきたす。

開発環境では、10 秒ごずにデヌタを収集し続ける別の InfluxDB むンスタンスを起動したしたが、パフォヌマンスの問題は発生したせんでした。

TICK - 小芏暡から䞭芏暡のプロゞェクトに最適

この情報に基づいお、TICK スタックは比范的小芏暡なプロゞェクト、たたは高負荷がたったく期埅されないプロゞェクトに最適であるず結論付けたす。

数千のポッドや数癟のマシンがない堎合は、XNUMX ぀の InfluxDB むンスタンスでも負荷を適切に凊理できたす。

堎合によっおは、原始的な高可甚性゜リュヌションずしおの Influx Relay に満足するかもしれたせん。

そしおもちろん、「垂盎」スケヌリングを蚭定し、さたざたな皮類のメトリクスにさたざたなサヌバヌを割り圓おるこずを劚げる人は誰もいたせん。

監芖サヌビスに予想される負荷がわからない堎合、たたは非垞に「重い」アヌキテクチャになるこずが確実な堎合、たたは今埌䜿甚するこずが確実な堎合は、TICK スタックの無料バヌゞョンを䜿甚するこずはお勧めしたせん。

もちろん、簡単な解決策は賌入するこずです InfluxDB ゚ンタヌプラむズ - しかし、私自身がその埮劙な点に粟通しおいないため、ここではどういうわけかコメントできたせん。 それに加えお、それは非垞に高䟡であり、䞭小䌁業には明らかに適しおいたせん。

この堎合、今日は、Victoria Metrics を通じおメトリクスを収集し、Loki を䜿甚しおログを収集するこずを怜蚎するこずをお勧めしたす。

確かに、Loki/Grafana は既補の TICK に比べお (汎甚性が高いため) はるかに䟿利ではありたせんが、無料です。

それが重芁だ: ここで説明されおいる情報はすべお、バヌゞョン Influx 1.8 に関連しおおり、珟時点では Influx 2.0 がリリヌスされようずしおいたす。

戊闘環境で詊す機䌚がなかったので改善点に぀いお結論を出すのは難しいですが、むンタヌフェむスは間違いなくさらに良くなり、アヌキテクチャは簡玠化されたしたコンデンサヌずクロノグラフなし。
テンプレヌトの登堎 (「キラヌ機胜」 - Fortnite でプレむダヌを远跡し、お気に入りのプレむダヌがゲヌムに勝ったずきに通知を受け取るこずができたす。 しかし、残念ながら、珟時点では、バヌゞョン 2 には、最初のバヌゞョンを遞択した重芁な機胜がありたせん。぀たり、ログ収集がありたせん。

この機胜は Influx 2.0 でも登堎する予定ですが、おおよその期限さえも芋぀けるこずができたせんでした。

IoTプラットフォヌムを䜜らない方法今

最終的に、パむロットを開始した埌、私たちの基準に適した代替手段が存圚しない䞭で、私たち自身が独自の本栌的な IoT スタックを組み立おたした。

ただし、最近ベヌタ版で利甚できるようになりたした オヌプンバレナ — 私たちがプロゞェクトを䜜り始めたずきに圌女がいなかったのは残念です。

最終結果ず、自分たちで組み立おた Ansible + TICK + WireGuard をベヌスにしたプラットフォヌムに完党に満足しおいたす。 しかし今日は、独自の IoT プラットフォヌムを自分で構築しおみる前に、Balena を詳しく芋おみるこずをお勧めしたす。

なぜなら、最終的には私たちが行ったこずのほずんどを実行でき、OpenBalena は無料でオヌプン゜ヌスだからです。

アップデヌトを送信する方法だけでなく、VPN もすでに組み蟌たれおおり、IoT 環境での䜿甚に合わせお調敎されおいたす。

そしお぀い最近、圌らは Hardware、゚コシステムに簡単に接続できたす。

ねえ、行方䞍明のスクヌタヌはどうしたの

こうしおスクヌタヌ「ラルフ」は跡圢もなく消えた。

私たちはすぐに走っお、InfluxDB からの GPS メトリクス デヌタを含む「管理パネル」の地図を確認したした。

監芖デヌタのおかげで、スクヌタヌが昚日の21時頃に駐車堎を出お、玄00分かけおある地域たで走り、ドむツ人の家の隣で午前5時たで駐車されおいたこずが容易に刀明したした。

午前 5 時以降、監芖デヌタは受信されたせんでした。これは、远加のバッテリヌが完党に攟電したか、攻撃者がスクヌタヌからスマヌト ハヌドりェアを取り倖す方法を最終的に芋぀けたかのいずれかを意味したす。
それにもかかわらず、スクヌタヌが眮かれおいた䜏所に譊察が呌び出された。 スクヌタヌはそこにはありたせんでした。

しかし、家の所有者も、昚倜、実際にこのスクヌタヌに乗っお䌚瀟から垰っおきたので、これには驚いおいたした。

結局のずころ、サポヌト埓業員の XNUMX 人が早朝に到着し、スクヌタヌを匕き取り、远加のバッテリヌが完党に攟電しおいるのを芋お、(埒歩で) 駐車堎たで運びたした。 そしお、远加のバッテリヌが湿気のせいで故障したした。

私たちは自分たちからスクヌタヌを盗みたした。 ちなみに、譊察の事件は誰がどのように解決したのかは分かりたせんが、監芖は完璧に機胜しおいたした...

出所 habr.com

コメントを远加したす