Grafana LokiにSyslog送ったら429 (TooManyRequests)エラーが大量発生した件について公式サポートに聞いてみた
事の発端
Grafana Cloudを使い始めて、色んなインフラ機能を移そうと試しています。その中の1つにGrafana Loki ( 要はログ保存してクエリ検索できる機能 )があり、これにSyslogを送ってみます。
送り方は以下の通りとしてます。
- syslog -> filebeat (Elastic) -> logstash (Grafana Plugin) -> loki (Grafana Cloud)
filebeatを使った理由は、Octetタイプのsyslog ( rfc6587 ) を受信するため、です。
簡単に設定できると思いきや、いざ試してみると 429エラーが頻発し、ネットを探して回ってもはっきりとした正解がわからなかったのでGrafana公式に問い合わせ。
公式のすすめ1
-
Labelがあまりにもユニークになりすぎてないことを確認
-
Logcliを入れろとのことで導入
-
logcliで
logcli series '{a="b"}' --analyze-labels
のように調べたい検索クエリを解析する ( 正規表現も可能 )
$ logcli series '{job="logstash"}' --analyze-labels
Total Streams: 6724
Unique Labels: 9
Label Name Unique Values Found In Streams
prv_ip 2230 6719
pub_ip 126 6719
syslog_program 5 6723
proto 3 6719
sproto 3 6719
action 2 6719
service_name 1 6724
job 1 6724
syslog_hostname 1 6719
トータルに対してユニークが多すぎるとパフォーマンス下がるらしいけど、ボクの場合は問題なさそうなので次。
公式のススメ2
以下の通り回答をもらった:
Lokiのパフォーマンスは、いくつかの重要なパラメータに依存しています。そのため、特定の制限を設けてパフォーマンスを維持しており、現在の状態ではストリーム制限に引っかかっている可能性があります。これは、ログに多くの異なる値を持つ「高カーディナリティ」なラベルが含まれているときに発生しやすい問題です。
高カーディナリティなラベルとは、多数の異なる値を持つラベルのことで、これが原因でLokiのパフォーマンスが低下したり、制限に引っかかることがあります。この対策やラベルの使い方については、こちらのガイド(Grafana Cloudのログラベルについて)に詳細が記載されています。
いやってかさっきと同じですやん。ってことで再度問い合わせ。
公式のススメ3
以下の通り回答をもらった:
高カーディナリティのラベルはストリームを細分化し、チャンクが小さくなり、クエリパフォーマンスが低下します。無限に増える可能性のある高カーディナリティラベルの使用は推奨しません。詳しくは以下のガイドを参照ください:
https://grafana.com/blog/2023/12/20/the-concise-guide-to-grafana-loki-everything-you-need-to-know-about-labels/
「IP」をインデックスラベルとして使うのではなく、Structured Metadataに移行することを推奨します。これにより、IPでのログフィルタリングが可能です。詳しくは以下のドキュメントをご覧ください:
https://grafana.com/docs/loki/latest/get-started/labels/structured-metadata/
要はIndexではなくMetadataに移せ、と。そうしたらFilterIn/Outできないのでは、、、?まあGrafana Lokiは大容量データの保存場所には適さないということですかね。