ログ収集ツール - VictoriaLogs 初体験

ログ収集ツール - VictoriaLogs 初体験

以前、VictoriaMetrics を紹介し、そのログ ソリューション VictoriaLogs をリリースしました。機能については簡単に紹介しましたが、使い方については紹介しませんでした。この記事では、VictoriaLogsを体験してみます。

VictoriaLogs は、ログ ストレージおよびクエリ バックエンドです。直接的なログ収集機能は提供していませんが、fluentbit、filebeat、logstash などの他の一般的なログ収集ツールと互換性があります。ここでは、ログを収集するために fluentbit を使用します。

ログ収集

たとえば、Kubernetes クラスターからログを収集し、VictoriaLogs に保存する必要があります。私たちの環境ではコンテナランタイムであるcontainerdを使用しているため、使用時にはdockerと区別する必要があります。ここでは、ログを収集するために fluentbit を使用し、それを Kubernetes クラスターにデプロイします。完全なデプロイメント ファイルは次のとおりです。

 apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: monitor labels: k8s-app: fluentbit-logging kubernetes.io/cluster-service: "true" data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 @INCLUDE input-kubernetes.conf @INCLUDE filter-kubernetes.conf @INCLUDE output.conf output.conf: | # [OUTPUT] # Name stdout # Match kube.var.log.containers.*.* [OUTPUT] Name http Match kube.var.log.containers.*.* host victorialogs port 9428 compress gzip uri /insert/jsonline?_stream_fields=stream&_msg_field=message&_time_field=time format json_lines json_date_format iso8601 header AccountID 0 header ProjectID 0 input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Parser cri DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 filter-kubernetes.conf: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Kube_Tag_Prefix kube.var.log.containers. Merge_Log On Merge_Log_Trim On Keep_Log Off K8S-Logging.Parser On K8S-Logging.Exclude Off Annotations Off Labels On [FILTER] Name nest Match kube.* Operation lift Nested_under kubernetes Add_prefix kubernetes_ [FILTER] Name nest Match kube.* Operation lift Nested_under kubernetes_labels Add_prefix kubernetes_labels_ parsers.conf: | [PARSER] Name json Format json Time_Key time Time_Format %d/%b/%Y:%H:%M:%S %z Time_Keep Off [PARSER] Name docker Format json Time_Key time Time_Format %Y-%m-%d %H:%M:%S Time_Keep Off [PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$ Time_Key time Time_Format %Y-%m-%d %H:%M:%S --- # fluentbit rbac apiVersion: v1 kind: ServiceAccount metadata: name: fluentbit namespace: monitor labels: k8s-app: fluentbit-logging kubernetes.io/cluster-service: "true" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentbit namespace: monitor labels: k8s-app: fluentbit-logging kubernetes.io/cluster-service: "true" rules: - apiGroups: [""] resources: - namespaces - pods - pods/log verbs: ["get", "list", "watch"] - apiGroups: ["extensions", "apps"] resources: - deployments - replicasets verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: fluentbit namespace: monitor labels: k8s-app: fluentbit-logging kubernetes.io/cluster-service: "true" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluentbit subjects: - kind: ServiceAccount name: fluentbit namespace: monitor --- apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentbit namespace: monitor labels: k8s-app: fluentbit-logging kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: fluentbit-logging template: metadata: labels: k8s-app: fluentbit-logging spec: serviceAccount: fluentbit serviceAccountName: fluentbit tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule containers: - name: fluentbit image: cr.fluentbit.io/fluent/fluent-bit:2.1.4 imagePullPolicy: Always ports: - containerPort: 2020 volumeMounts: - name: varlog mountPath: /var/log - name: fluent-bit-config mountPath: /fluent-bit/etc/fluent-bit.conf subPath: fluent-bit.conf - name: fluent-bit-config mountPath: /fluent-bit/etc/input-kubernetes.conf subPath: input-kubernetes.conf - name: fluent-bit-config mountPath: /fluent-bit/etc/filter-kubernetes.conf subPath: filter-kubernetes.conf - name: fluent-bit-config mountPath: /fluent-bit/etc/output.conf subPath: output.conf volumes: - name: varlog hostPath: path: /var/log - name: fluent-bit-config configMap: name: fluent-bit-config

まず、ConfigMap で収集するログを設定します。ログ ソース パスは /var/log/containers/*.log で、これがデフォルトのコンテナー ログ パスです。ノード上で表示できますが、このパスの下のログは単なるソフト リンクであることに注意してください。実際のログ パスは /var/log/pods の下にあるため、ホストの /var/log ディレクトリを fluentbit pod にマウントする必要があります。 /var/log/containers/ ディレクトリのみをマウントすると、実際のログを取得できません。

さらに、後続のログフィルタリングを容易にするために、ログに kube.* のタグも付けます。タグに基づいてログをフィルタリングし、対応する処理を実行できます。

ログがさまざまな方法で処理された後、最も重要なのは OUTPUT 出力元の構成です。デバッグ段階では、まず stdout 出力ソースを構成できます。

 [OUTPUT] Name stdout Match kube.var.log.containers.*.*

このようにして、fluentbit pod ログを通じてログが収集されたかどうかを確認できます。

収集された場合は、elasticsearch、kafka、redis などの他の出力ソースを設定できます。もちろん、ログを VictoriaLogs に出力したいので、以下のように VictoriaLogs の出力ソースを設定する必要があります。

 [OUTPUT] Name http Match kube.var.log.containers.*.* host victorialogs port 9428 compress gzip uri /insert/jsonline?_stream_fields=stream&_msg_field=message&_time_field=time format json_lines json_date_format iso8601 header AccountID 0 header ProjectID 0

ここで、VictoriaLogs のホストとポートを設定します。最も重要なのは uri パラメータで、これは VictoriaLogs /insert/jsonline?_stream_fields=stream&_msg_field=message& の挿入インターフェースです。ここでは、uri パラメータ内の 3 つのパラメータ _stream_fields、_msg_field、および _time_field に注意する必要があります。これら 3 つのパラメータは、VictoriaLogs の挿入インターフェースに必要です。このうち、_stream_fields はログストリームを指定するフィールドで、ここでは stream と指定します。_msg_field はログの内容を指定するフィールドで、ここでは message と指定します。_time_field はログの時刻を指定するフィールドで、ここでは time と指定します。 VictoriaLogs にログを収集できるように、取得する特定のフィールドをログに従って決定する必要があります。もちろん、異なるテナントを区別するために使用できる AccountID と ProjectID という 2 つのフィールドがあります。ここでは今のところ使用しないので、0 に設定します。

上記のリソース リストを展開するだけです。デプロイが完了したら、fluentbit のポッド ログを確認できます。ログにエラーがない場合、fluentbit のデプロイメントは成功したことを意味します。次に、VictoriaLogs をデプロイします。

VictoriaLogsをインストールする

VictoriaLogs の現在のプレビュー バージョンは単一ノード アプリケーションのみであるため、以下に示すように、デプロイする必要があるのは 1 つのデプロイメントのみです。

 # deploy victorialogs apiVersion: apps/v1 kind: Deployment metadata: name: victorialogs namespace: monitor labels: app: victorialogs spec: selector: matchLabels: app: victorialogs template: metadata: labels: app: victorialogs spec: containers: - name: victorialogs image: victoriametrics/victoria-logs:latest # command: # - -storageDataPath=/vlogs # 指定日志存储路径ports: - containerPort: 9428 volumeMounts: - name: logs mountPath: victoria-logs-data # 默认日志存储路径volumes: - name: logs persistentVolumeClaim: claimName: victorialogs-pvc --- # deploy victorialogs service apiVersion: v1 kind: Service metadata: name: victorialogs namespace: monitor labels: app: victorialogs spec: ports: - port: 9428 targetPort: 9428 type: NodePort selector: app: victorialogs --- # deploy victorialogs pvc apiVersion: v1 kind: PersistentVolumeClaim metadata: name: victorialogs-pvc namespace: monitor spec: accessModes: - ReadWriteOnce storageClassName: cfsauto resources: requests: storage: 10Gi

ここで注意する必要があるのは、VictoriaLogs の保存パスです。 VictoriaLogs のデフォルトのストレージ パスは victoria-logs-data であり、これはパラメーター -storageDataPath で指定できます。ログ データを永続化したい場合は、パスをマウントする必要があります。たとえば、ここでは関連付けに PVC を指定します。さらに、上記では VictoriaLogs のホスト アドレスを fluentbit の victorialogs に出力したので、これを公開するには victorialogs という名前の Service オブジェクトも作成する必要があり、これは fluentbit と同じ名前空間に存在する必要があります。さらに、VictoriaLogs 自体には Web インターフェイスが付属しており、ここでは NodePort を通じて公開されているため、NodeIP:NodePort を通じて VictoriaLogs にアクセスできます。

同様に、上記のリソース リストを直接デプロイすることもできます。デプロイが完了したら、VictoriaLogs ポッド ログを確認できます。ログにエラーがない場合、VictoriaLogs のデプロイメントは成功したことを意味します。

 $ kubectl get pods -n monitor NAME READY STATUS RESTARTS AGE fluentbit-6rmp8 1/1 Running 0 28m fluentbit-bbgxb 1/1 Running 0 28m fluentbit-xwrzs 1/1 Running 0 28m victorialogs-5856895b4c-mcffw 1/1 Running 0 41m $ kubectl get svc -n monitor NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE victorialogs NodePort 10.101.31.122 <none> 9428:30694/TCP 48m

デプロイが完了すると、以下に示すように、NodeIP:30694 を介して VictoriaLogs にアクセスできるようになります。

以下に示すように、select/vmui ​​をクリックすると、VictoriaLogs の Logs Explorer インターフェースにジャンプします。

次に、ログに含まれるものを照会するなど、必要に応じてログを照会できます。   alog  キーワードログ:

さらに、テーブルと JSON の 2 つの表示モードがあります。

ログ クエリでは VictoriaLogs の LogsQL 構文が使用されます。具体的な構文については、公式ドキュメント(https://docs.victoriametrics.com/VictoriaLogs/LogsQL.html)を参照してください。

現在、VictoriaLogs はまだプレビュー版ですので、完成していない機能がまだ多くあります。シンプルなログクエリ機能のみを備えています。たとえば、ログアラーム、ビジュアルチャート、その他の機能は現時点ではサポートされていません。ただし、VictoriaLogs の開発者はすでに開発を進めており、すぐにサポートされるようになると考えています。

<<:  クラウド移行のコスト課題を解決する方法

>>:  ビジネスを台無しにする可能性のあるクラウド コンピューティングの 10 の間違い

推薦する

Qvodのサーバーシャ​​ットダウン事件が拡大: 警察が同社に突入したと報道

テンセントテクノロジーニュース、4月22日:Qvodのサーバーのシャットダウンについてオンラインで多...

xvmlabs - 年額 9.9 ドル / 4IP / 1g メモリ / 15g SSD / 300g トラフィック / ロサンゼルス

xvmlabs は IT7 の実験的な製品であり、公式の実験に使用されているように感じます。 IT7...

スパムリンクの識別と処理方法

隠しテキスト、隠しリンク、キーワードスタッキング、隠しページ、JS リダイレクトなどの SEO 不正...

arkecxクラウドサーバーはどうですか?トルコデータセンターのクラウドサーバーのレビュー

arkecx は中東のトルコにも独自のデータセンターを持ち、トルコのクラウド サーバー サービスをす...

A5 Yuehuai SEO最適化道路の分析

最近のSEOニュースを調べてみると、A5が正式に独立したドメイン名yuehuai.comを立ち上げ、...

ウェブマスターは、自分のウェブサイトにホームページのみを掲載するという「奇妙な現象」にどのように対処すべきでしょうか?

毎日ウェブサイトに収集されたコンテンツの量を確認することは、ウェブマスターがウェブサイトの健全性評価...

IDC:2020年上半期、中国のクラウドプロフェッショナルサービス市場規模は71.9億人民元に達した

国際データコーポレーション(IDC)は11月24日、最新の「中国クラウド専門サービス市場(2020年...

インターネット分散ストレージ入門

Google、Amazon、Tencent などの大手インターネット企業では、事業が広範囲にわたるた...

変更された2つのJSアプリケーションの解釈

あらゆる Web テクノロジーの出現は、Web デザイナーやユーザーによりよいサービスを提供するため...

3分レビュー! 2021年12月のクラウドコンピューティング分野の重要な動向を簡単に紹介します

[[442607]] 2020年以降、クラウドコンピューティングがトレンドになりました。ますます多く...

忘れられた URL の最適化のヒント

多くのウェブマスターはウェブサイトの URL の最適化を見落としがちですが、ウェブサイトの最適化には...

[RSA2019 イノベーション サンドボックス] CloudKnox: ハイブリッド クラウド環境向けの ID および認証管理プラットフォーム

すべての RSA カンファレンスにおけるイノベーション サンドボックス セッションは常に注目の的とな...

NodeSelector から NodeAffinity へ: Kubernetes ノード アフィニティの進化を探る

Kubernetes では、Pod のスケジュールをより正確に制御し、クラスター内の特定のノードに割...

ブルーホスト ブラックフライデー 3.95ドル/月

bluehost の仮想ホストについてはあまり語りません。アメリカの仮想ホストの安定性、速度、リソー...