タグ付けされた質問 「statsd」


1
statsdとグラファイトの高可用性、Webアクセスおよびスケーラブルな展開
statsd / graphiteをセットアップして、HTMLデバイスで実行されているJSアプリをログに記録できるようにします(つまり、収容されたLAN環境ではなく、直接制御できない大量の着信データがある場合)。 私の制約: エントリポイントはHTTPを話す必要があります:これは単純なHTTP-to-UDP-statsdプロキシ(たとえば、githubのhttpstatsd)によって解決されます 単一のサーバーの障害に抵抗する必要があります(マーフィーの法則と戦うために:) 水平方向にスケーラブルでなければなりません:webscale、baby!:) アーキテクチャは可能な限りシンプル(かつ安価)に保つ必要があります 私のサーバーは仮想マシンです データファイルはファイラーアプライアンスに保存されます(NFSを使用) tcp / udpハードウェアロードバランサーを自由に使用できます 要するに、データパス:[client]-(http)-> [http2statsd]-(udp)-> [statsd]-(tcp)-> [graphite]-(nfs)-> [filer] これまでの私の調査結果: http2statsd部分のスケーリングは簡単です(ステートレスデーモン) statsd部分のスケーリングは簡単ではないようです(sum、avg、min、maxなどの集計データのグラファイトで一貫性のない値になると思います)。HTTPデーモンがキーを分割するために一貫したハッシュを行わない限り。たぶんアイデア...(しかし、HAの質問があります) グラファイト部分のスケーリングは、シャーディング(カーボンリレーを使用)で実行できます(ただし、HAの問題も解決しません)。明らかに、いくつかのささやきインスタンスは同じNFSファイルを書き込むべきではありません。 ファイラー部分のスケーリングは問題の一部ではありません(ただし、IOが少ないほど良いです:) 共有NFSデータのみを読み取るため、webappのスケーリングは明らかです(私はテストしていませんが)。 だから、誰もが安定したstatsd /グラファイト展開のために共有する経験とベストプラクティスを持っているのだろうかと思っていましたか?

5
nc(netcat)がハングし、UDPモードでさらにデータを待機します。
私は読み取りブロック内のncを介してstatsdに小さな文字列を送信しようとしています: while read line; do printf "folder.counter:value|1c" | nc -q 0 -u $host $port done 残念なことに、UDPモードでは、ncが指定されたにもかかわらず、無期限に待機したいようです。-q 0マニュアルページでは、EOFの直後にプログラムが終了すると書かれています。 私はパスしようとしました-w 1が、送信するデータが1秒あたり1行以上で入ると、データがバッファリングし、リアルタイムの統計情報を失います(言うまでもなく、何らかのバッファオーバーフローのリスクがあります)。 私がnetcatでやろうとしていることを行うことは可能ですか、またはstatsdライブラリを持つ言語で何かを書く必要がありますか?
16 shell  netcat  statsd 

5
グラファイトのささやきでカウンターを削除するにはどうすればよいですか?
にカウンターがstats.message.fooあり、それをに移動したいstats.messages.foo。 コードを更新して新しいカウンターを追加しましたが、古いカウンターはまだ存在しています。 私がしまし読んグラファイトからのstatを削除するために行うには、すべてのIの必要性をディスク上の適切なささやきのファイルを削除することです、しかし、削除の数秒以内にいるようだwspそれは(データなし)に再生されます。 どのキーが正しいキーかを覚えておく必要があるため、データが保存されているキーの名前を変更する場合、これは面倒です。 古いカウンターを永久に削除する方法を知っている人はいますか?
14 graphite  statsd 

4
tcpdumpはudpのパフォーマンスを向上させます
一連の負荷テストを実行して、次のセットアップのパフォーマンスを判断しています。 Node.js test suite (client) --> StatsD (server) --> Graphite (server) つまり、node.jsテストスイートは、x秒ごとに一定量のメトリックを別のサーバーにあるStatsDインスタンスに送信します。次に、StatsDは、メトリックを毎秒同じサーバーにあるGraphiteインスタンスにフラッシュします。次に、テストスイートによって実際に送信されたメトリックの数と、グラファイトによって受信されたメトリックの数を調べて、テストスイートとグラファイトの間のパケット損失を判断します。 しかし、20〜50%の範囲の非常に大きなパケットドロップ率(UDPプロトコルで送信されていることに注意してください)が得られることがあることに気付きました。そのため、これらのパケットがドロップされる場所を調べ始めたのは、StatsDのパフォーマンスの問題の可能性があるからです。そこで、このドロップが発生した場所を追跡するために、システムのすべての部分でメトリックの記録を開始しました。そして、これは物事が奇妙になる場所です。 私が使用していtcpdumpのを、私は、テストの実行が行われた後、検査キャプチャファイルを作成します。しかし、tcpdumpを実行してテストを実行すると、パケット損失はほとんどありません。tcpdumpがテストのパフォーマンスを何らかの形で向上させているように見えますが、これがなぜ、どのように行われるのかわかりません。次のコマンドを実行して、サーバーとクライアントの両方でtcpdumpメッセージを記録しています。 tcpdump -i any -n port 8125 -w test.cap 特定のテストケースでは、40000メトリック/秒を送信しています。tcpdumpの実行中のテストでは約4%のパケット損失がありますが、テストなしでは約20%のパケット損失があります。 両方のシステムは、次のセットアップでXen VMとして実行されています。 Intel Xeon E5-2630 v2 @ 2.60GHz 2GB RAM Ubuntu 14.04 x86_64 潜在的な原因についてすでに確認したこと: UDPバッファーの受信/送信サイズを増やします。 テストに影響するCPU負荷。(クライアント側とサーバー側の両方で最大負荷40〜50%) 「any」の代わりに特定のインターフェイスでtcpdumpを実行します。 「-p」を指定してtcpdumpを実行し、混合モードを無効にします。 サーバーでのみtcpdumpを実行します。これにより、20%のパケット損失が発生し、テストには影響がないようです。 クライアントでのみtcpdumpを実行します。これにより、パフォーマンスが向上しました。 netdev_max_backlogおよびnetdev_budgetを2 ^ 32-1に増やします。これは違いはありませんでした。 すべてのNICで無差別モードの可能な設定をすべて試しました(サーバーのオンとクライアントのオフ、サーバーのオフとクライアントのオン、両方のオン、両方のオフ)。これは違いはありませんでした。

3
etsy / statsdの代替
etsyのstatsdに代わるものはありますか?ダッシュボードに似た完全なソリューションかもしれませんか?私の研究では、独自のSaaSソリューションのみが見つかりました。 知らない人のために:statsdは、UDPを介してアプリとシステムのメトリックを収集し、それらをGraphiteに送信して、多少美しいプロットを生成するデーモンです。利用可能なすべての重要な言語用のAPIがあります。 私は欲しい: サードパーティがデータを収集することなく、サーバーで実行する必要があります システム、Java、Perlの両方からデータを収集できる必要があります 軽量で柔軟でなければなりません FOSS 追加のプログラミングが必要な場合があり、フレームワークのみである場合があります
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.