2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ローカル fluentd 検証環境構築方法 メモ

Posted at
  • 学習目的でfluentd検証環境をローカルにDocker を使用して作成した。備忘録としてメモしておく。

コード

  • FastAPI製テスト用APIへのアクセスログをfluentdで収集する。

構成

project	- app		-	api - main.py
					|_	Dockerfile
					|_	requirements.txt
		- fluentd	-	config	- fluent.conf
					|_	tmp
		- docker-compose.yml

docker-compose.yml

  • テスト用APIコンテナとfluentdコンテナの起動設定
version: "3.5"

networks:
  container-link:
    name: docker.internal
services:
  app:
    container_name: "app"
    build: ./app
    volumes:
      - ./app/api:/usr/src/server
    logging:
      # ログ出力先にfluentdを指定
      driver: "fluentd"
      options:
        # fluentdサーバの宛先
        fluentd-address: "localhost:24220"
        # ログに付与するタグ
        tag: "docker.{{.Name}}"
    ports:
      - "8000:8000"
    networks:
      - container-link
  fluentd:
    image: fluent/fluentd:latest
    container_name: "fluentd"
    ports:
      - "24220:24220"
      - "24220:24220/udp"
    environment:
      - 'FLUENTD_CONF=fluent.conf'
    volumes:
      - ./fluentd/tmp:/fluentd/log
      - ./fluentd/config:/fluentd/etc
    networks:
      - container-link

fluentdコンテナ

fluent.conf

  • fluentd設定ファイル
  • <source>:ログの待ち受け先を指定。今回の場合は24220番ポートを指定。
  • <match>:ログの出力先を指定。今回の場合は標準出力(コンテナログ)を指定。
<source>
  @type forward
  port 24220
</source>

<match docker.**>
  @type stdout
</match>

テスト用APIコンテナ

Dockerfile

  • Python3.8イメージを基に依存ライブラリインストールとFastAPIアプリ起動用設定を記述
FROM python:3.8

WORKDIR /usr/src/server
ADD requirements.txt .
RUN pip install -r requirements.txt

# uvicornのオプションに--reloadを付与し、
# main.pyの編集と同時に変更内容を反映させる。
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]

requirements.txt

  • 依存ライブラリ設定
fastapi
uvicorn

main.py

  • パスパラメータに指定したユーザーIDをそのまま返却するテスト用API
import uvicorn
from fastapi import FastAPI
app = FastAPI()

@app.get("/v1/users/{user_id}")
def users(user_id):
    user = {
        "user_id":user_id
    }
    return user


if __name__ == "__main__":
    uvicorn.run(app, port=8000, loop="asyncio")

動作確認

起動

docker-compose up

リクエスト・レスポンス

GET /v1/users/12345 HTTP/1.1
Host: localhost:8000
{
    "user_id": "12345"
}

ログ出力

fluentd    | 2022-04-17 03:45:44.000000000 +0000 docker.app: {"container_id":"90f01401bb27c886a9fedc956978af3fd2775cde97176371feccc7da13eaa737","container_name":"/app","source":"stdout","log":"INFO:     172.21.0.1:59200 - \"GET /v1/users/12345 HTTP/1.1\" 200 OK"}

参考情報

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?