ログ収集ツール - 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 の間違い

推薦する

Pinduoduoには価格競争はない

Pinduoduoの成功は価格の安さによるものではなく、無視されていた消費者市場を発掘し、商品の製造...

詳細説明: Linuxネットワーク仮想化技術

Linux ネットワーク仮想化は、LXC プロジェクトのサブプロジェクトです。 LXC には、ファイ...

ウェブサイトが時代遅れにならず、ユーザーに好印象を与えるためにSEOを最適化する方法

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています企業のウェ...

注目すべき DevOps スタートアップ 10 社

[[435935]]ソフトウェア開発と IT 運用を組み合わせた DevOps は、人気と需要が高ま...

ウェブサイトの予備診断を行うための10の基本的なステップ

一般的に、プロの SEO サービス プロバイダーは、Web サイトの予備診断を行う必要があります。W...

各リンクが次のリンクに確実にリンクされるように、ウェブサイトを最適化するための適切な接続ポイントを見つける方法

ウェブサイトの最適化に関しては、首を横に振るウェブマスターもいます。一方的な見方をする人は、ウェブサ...

企業ウェブサイトの最適化で注意すべき点について簡単に説明します。

業界に入ったばかりのSEO担当者の場合、ほとんどの人が会社の公式サイトの最適化を担当していますが、あ...

v.psはどうですか?サンノゼクラウドサーバ評価、CN2 GIA+CUII(2)+CMIライン

v.psはどうですか? v.ps サンノゼはどうですか?皆様のフィードバックによると、China T...

WeChatミニプログラムが2周年を祝う:その盛衰を振り返る

この記事では、ミニプログラム2周年のさまざまな分野のデータを一覧にして、ミニプログラム業界と生態系の...

大規模eコマースウェブサイトのSEOを最適化する方法

誰かが尋ねました: SEO と検索エンジンの関係は何ですか? この質問に関して、私は個人的に SEO...

PyramidServer - ドイツ製 KVM が 50% オフ、限定オファー

Pyramid Server は 2007 年に設立され、2010 年に正式に会社として運営を開始し...

Yunyun検索の特徴からSEO発展の今後の方向性を洞察

検索エンジンは長年にわたって開発されてきましたが、Google が発明した PageRank アルゴ...

曲湖、雲張桂、甸甸来ホームステイ管理ソフトウェアのレビュー

[[361451]]ネットワーク技術の進歩により、ホームステイ業界の情報、ネットワーク、グループ、標...

探索は喜びと不安をもたらす

Google の「ロボット」がインターネットの隅々までクロールして以来、検索エンジンは人々にとって欠...

データベース時代の巨人であるオラクルはなぜクラウドコンピューティングの流行に乗らなかったのでしょうか?

新しい 4 つの偉大な発明の 1 つとして、クラウド コンピューティングの概念は過去 2 年間で非常...