Fluent Bit는 다양한 소스에서 데이터 / 로그를 수집하고 통합하여 여러 대상으로 보낼 수 있는 오픈 소스 및 다중 플랫폼 로그 프로세서 및 Forwarder 입니다. Docker 및 Kubernetes 환경 과 완벽하게 호환 됩니다.Fluent Bit는 C 로 작성되었으며 약 30 개의 확장을 지원하는 플러그 가능 아키텍처가 있습니다. 빠르고 가벼우 며 TLS를 통한 네트워크 운영에 필요한 보안을 제공합니다. (참조 - https://fluentbit.io)
Fluent Bit 설치환경 구성 .
1.권한 설정
Amazon EKS 클러스터의 서비스 계정에 대한 IAM 역할을 사용하면, IAM 역할을 Kubernetes 서비스 계정과 연결할 수 있습니다. 그런 다음이 서비스 계정은 해당 서비스 계정을 사용하는 모든 포드의 컨테이너에 AWS 권한을 제공 할 수 있습니다. 이 기능을 사용하면 해당 노드의 포드가 AWS API를 호출 할 수 있도록 더 이상 노드 IAM 역할에 대한 확장 권한을 제공 할 필요가 없습니다.
Cluster에서 서비스 계정에 대한 IAM 역할을 활성화 합니다. (이전 LAB에서 이미 수행했을 수도 있습니다.)
# name of our elasticsearch cluster
export ES_DOMAIN_NAME="eksworkshop-logging"
# Elasticsearch version
export ES_VERSION="7.4"
# kibana admin user
export ES_DOMAIN_USER="eksworkshop"
# kibana admin password
export ES_DOMAIN_PASSWORD="$(openssl rand -base64 12)_Ek1$"
ES의 패스워드는 one uppercase letter, one lowercase letter, one number, one special character 를 포함하도록 되어 있습니다. openssl random으로 패스워드를 생성합니다.
2. ElasticSearch 설치.
# Download and update the template using the variables created previously
curl -sS https://www.eksworkshop.com/intermediate/230_logging/deploy.files/es_domain.json \
| envsubst > ~/environment/logging/es_domain.json
# Create the cluster
aws es create-elasticsearch-domain \
--cli-input-json file://~/environment/logging/es_domain.json
AWS Console 에서 Elasticsearch를 검색합니다. AWS ES를 배포하게 되면 아래와 같이 "로드 중"으로 도메인 상태가 표기 됩니다.
정상적으로 도메인 상태가 표기되기 까지는 15분 이상 소요됩니다.
ElasticSearch 도메인 상태가 정상일 때까지 , 다음 단계를 수행하지 마십시요.
3. ElasticSearch Access 구성
앞서 생성한 Fluent Bit ARN이 ElasticSearch의 API를 통해 Backend 역할을 받아 접근 할 수 있도록 아래와 같이 설정합니다.
Endpoint URL은 아래에서 확인이 가능합니다.
# Need to retrieve the Fluent Bit Role ARN, ES_Endpoint
export FLUENTBIT_ROLE=$(eksctl get iamserviceaccount --cluster eksworkshop --namespace logging -o json | jq '.[].status.roleARN' -r)
export ES_ENDPOINT=$(aws es describe-elasticsearch-domain --domain-name ${ES_DOMAIN_NAME} --output text --query "DomainStatus.Endpoint")
# Update the Elasticsearch internal database
curl -sS -u "${ES_DOMAIN_USER}:${ES_DOMAIN_PASSWORD}" \
-X PATCH \
https://${ES_ENDPOINT}/_opendistro/_security/api/rolesmapping/all_access?pretty \
-H 'Content-Type: application/json' \
-d'
[
{
"op": "add", "path": "/backend_roles", "value": ["'${FLUENTBIT_ROLE}'"]
}
]
'
cd ~/environment/logging
# get the Elasticsearch Endpoint
export ES_ENDPOINT=$(aws es describe-elasticsearch-domain --domain-name ${ES_DOMAIN_NAME} --output text --query "DomainStatus.Endpoint")
curl -Ss https://www.eksworkshop.com/intermediate/230_logging/deploy.files/fluentbit.yaml \
| envsubst > ~/environment/logging/fluentbit.yaml