LoginSignup
3
2

More than 1 year has passed since last update.

オンプレ VM から Fluent Bit を使用して Cloud Logging へのログ送信

Last updated at Posted at 2021-08-09

はじめに

オンプレ環境のログを Cloud Logging に格納する方法として Fluent Bit を使用したのでその内容を記載する
Cloud Logging 自体と Fluentd を使用した方法は下記別記事に書いている

Fluent Bit

Fluent Bit は元々は Treasure Data 社が開発し、現在はベンターニュートラル/コミュニティ主導・Apache Licensev2.0 で開発が進めれている、軽量ログ/メトリクスコレクタ
CNCF の Fluentd 傘下のサブプロジェクトとして管理されている
パフォーマンスに重きを置いて開発され、実装には C 言語が使用され、fluentd と比較して軽量に動作する

Google Cloud における Fluent Bit

Google Cloud では、従来の fluentd 拡張の Logging エージェントから、
Logging については Fluent Bit ベースになる Ops エージェント へ置き換えが進めれている
また、GKE に関しては、1.17 以降ですでに Fluent Bit ベースに置き換えがされている

Stackdriver output plugin

Fluent Bit はデフォルトで DATAPLANE の OUTPUTS で Stackdriver に対応しており、Cloud Logging へログ送付が可能となっている

設定・実施 (オンプレ VM (CentOS)へインストール, Cloud Logging ログ送付テスト)

実際にオンプレ環境から Cloud Logging へのログ送付を行う
ここでのオンプレ環境の VM としては CentOS を使用している
設定には Ansible で実施したため task の yaml 例も合わせて記載する

前提条件

下記にログ送付先の Google Cloud プロジェクトのサービスアカウントのクレデンシャルキーを配置する (参考)
/etc/google/auth/application_default_credentials.json

実施順番

  1. fluentbit install
  2. fluentbit 設定
  3. ログ転送確認

1. fluentbit install

さまざまなプラットフォームへのインストールとしてパッケージが用意されている
今回は Yum 用の設定をしてインストールする

1.1. パッケージ設定

手動で設定する場合と、Ansible で設定する場合の 2パターンを示す

手動の場合は、/etc/yum.repos.d/の下に、下記ファイルを設置する

/etc/yum.repos.d/td-agent-bit.repo
[td-agent-bit]
name = TD Agent Bit
baseurl = https://packages.fluentbit.io/centos/7/$basearch/
gpgcheck=1
gpgkey=https://packages.fluentbit.io/fluentbit.key
enabled=1

ansible で設置する場合は、下記の通り

/etc/ansible/roles/td-agent-bit/tasks/main.yaml(package箇所抜粋)
---
# https://docs.fluentbit.io/manual/installation/linux/redhat-centos
- name: Add td-agent repository
  yum_repository:
    name: td-agent-bit
    description: TD Agent Bit
    baseurl: https://packages.fluentbit.io/centos/7/$basearch/
    gpgkey: https://packages.fluentbit.io/fluentbit.key
    gpgcheck: yes
  become: true
  when:
    - ansible_distribution == "CentOS"

以上で YUM でのインストールができるようになる

1.2. install

パッケージ設定を実施したので yum で install する

$ yum install td-agent-bit

Ansible で実施すると下記の通り

/etc/ansible/roles/td-agent-bit/tasks/main.yaml(install箇所抜粋)
- name: install td-agent-bit centos7 yum
  yum:
    name: "{{ packages }}"
    state: latest
  vars:
    packages:
      - td-agent-bit
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "7"

- name: install td-agent-bit centos8 dnf
  dnf:
    name: "{{ packages }}"
    state: latest
  vars:
    packages:
      - td-agent-bit
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "8"

- name: enabled and start td-agent-bit
  systemd:
    name: td-agent-bit
    state: started
    enabled: yes
  become: true
  when:
   - ansible_distribution == "CentOS"

fluent-bit (td-agent-bit) のインストール完了

2. fluentbit 設定

fluentbitの設定を実施する
マニュアルを参考に下記設定例

  • SERVICE
    • 特にデフォルトから変えてはいない
  • INPUT
    • ここでは試しに tail/var/log/messages/var/log/secure のログ収集をする
  • OUTPUT
    • stackdriver を利用する
    • google_service_credentials
      • サービスアカウントの認証キーの保存パス
      • 作成例: 別qiita記事
    • location
      • ロケーション名
    • namespace
      • 環境などの識別子
      • ここではmy-home-onprem-labとしている(適当)
    • node_id
      • ノードの識別子
      • ホスト名から取得するように ${HOSTNAME} としている
    • resource
      • リソースタイプ
      • generic_node が指定可能
    • project_id
      • 指定しないとサービスアカウントのプロジェクトとなる(指定も可能)
/etc/td-agent-bit/td-agent-bit.conf
[SERVICE]
    daemon       Off
    log_level    info
    parsers_file parsers.conf
    plugins_file plugins.conf
    ## Default
    # flush        5
    # http_server  Off
    # http_listen  0.0.0.0
    # http_port    2020
    # storage.metrics on

# https://docs.fluentbit.io/manual/pipeline/inputs/tail
[INPUT]
    Name   tail
    Path   /var/log/messages
    DB     /run/fluent-bit-messages.state
    Tag    messages

# https://docs.fluentbit.io/manual/pipeline/inputs/tail
[INPUT]
    Name   tail
    Path   /var/log/secure
    DB     /run/fluent-bit-secure.state
    Tag    secure

# https://docs.fluentbit.io/manual/pipeline/outputs/stackdriver
[OUTPUT]
    Name        stackdriver
    Match       *
    google_service_credentials /etc/google/auth/application_default_credentials.json
    location  asia-northeast1
    namespace my-home-onprem-lab
    node_id   ${HOSTNAME}
    resource  generic_node
    ## Defaults to the project ID of the google_service_credentials file, or the project_id from Google's metadata.google.internal server.
    # export_to_project_id [project_id]

上記設定ファイル(td-agent-bit.conf)を/etc/td-agent-bit/の下に設定してtd-agent-bitのリスタートを実施する
Ansible で設定すると下記のような感じになる (files に上記の設定を置く)

/etc/ansible/roles/td-agent-bit/tasks/main.yaml(config配置restart箇所抜粋)
- name: set td-agent-bit config
  copy:
    src: "{{ item }}"
    dest: /etc/td-agent-bit/
    owner: root
    group: root
    mode: 0644
    backup: yes
  with_items:
    - td-agent-bit.conf
  become: yes
  register: td_agent_bit_conf

- name: restart td-agent-bit
  when: td_agent_bit_conf is changed
  systemd:
    name: td-agent-bit
    state: restarted
  become: yes

以上で、fluent bit の設定まで完了し、ログ転送開始

3. ログ転送確認

ログエクスプローラでログが転送できていることを確認できる

RESOURCE TYPEGeneric Node で見れる
LOG NAME として転送した内容によってmessages, secure などもわかる

スクリーンショット 2021-08-09 22.32.15.png

resource.labels の詳細を見ると、設定したlocation, namespace, node_id, project_id (これは未設定の場合はサービスアカウントと同じプロジェクト) になっていることを確認できる

スクリーンショット 2021-08-09 21.36.14.png

以上でオンプレ環境(Google Cloud 外)の VM から、Cloud Logging へログが転送できたことを確認できた

おわりに

Fluent Bit でオンプレ環境(Google Cloud 外) から Cloud Logging へのログ送信ができることを確認できた
fluentd を使う方法より簡単で Google Cloud 側のログエージェント対応からも、こちらを使うのが良いと思われる

その他. Opsエージェントインストール

Google Cloud 上の VM インスタンス (GCE) で、Opsエージェントを入れる方法も簡単に記載する

ドキュメントを参照してインストール

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

既存の Logging エージェント(google-fluentd)が入っている場合は、削除しないと上記がうまく行かないので uninstall する

sudo yum remove -y google-fluentd

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2