はじめに
オンプレ環境のログを 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
実施順番
- fluentbit install
- fluentbit 設定
- ログ転送確認
1. fluentbit install
さまざまなプラットフォームへのインストールとしてパッケージが用意されている
今回は Yum 用の設定をしてインストールする
1.1. パッケージ設定
手動で設定する場合と、Ansible で設定する場合の 2パターンを示す
手動の場合は、/etc/yum.repos.d/
の下に、下記ファイルを設置する
[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 で設置する場合は、下記の通り
---
# 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 で実施すると下記の通り
- 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
のログ収集をする
- ここでは試しに tail で
- OUTPUT
- stackdriver を利用する
- google_service_credentials
- サービスアカウントの認証キーの保存パス
- 作成例: 別qiita記事
- location
- ロケーション名
- namespace
- 環境などの識別子
- ここでは
my-home-onprem-lab
としている(適当)
- node_id
- ノードの識別子
- ホスト名から取得するように
${HOSTNAME}
としている
- resource
- リソースタイプ
-
generic_node
が指定可能
- project_id
- 指定しないとサービスアカウントのプロジェクトとなる(指定も可能)
[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 に上記の設定を置く)
- 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 TYPE
は Generic Node
で見れる
LOG NAME
として転送した内容によってmessages
, secure
などもわかる
resource.labels の詳細を見ると、設定したlocation
, namespace
, node_id
, project_id
(これは未設定の場合はサービスアカウントと同じプロジェクト) になっていることを確認できる
以上でオンプレ環境(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
参考