Aws

EKS Fluent-Bit to OpenSearch

wngnl05 2024. 12. 24. 15:06

OpenSearch 도매인 생성할 때 참고하세요.

최대 절 수에 1024를 꼭 적어주세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:<리전>:<사용자 아이디>:domain/<OpenSearch 도매인>/*"
    }
  ]
}

위의 정책은 OpenSearch의 보안구성 > 액세스 정책 에 넣어주세요

 

 

OpenSearch 정책 생성하기

OPENSEARCH_ARN="<OpenSearch ARN>"
aws iam create-policy \
    --policy-name wngnl_OpenSearch_Policy \
    --policy-document '{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "es:ESHttp*"
                ],
                "Resource": "'"${OPENSEARCH_ARN}"'",
                "Effect": "Allow"
            }
        ]
    }'

OpenSeach 역활 생성하기

CLUSTER_NAME="<EKS CLUSTER 이름>"
OIDC_ID=$(aws eks describe-cluster --name $CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text | sed 's|https://||')
ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
OIDC_ARN="arn:aws:iam::$ACCOUNT_ID:oidc-provider/$OIDC_ID"

aws iam create-role --role-name wngnl_OpenSearch_Role --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "'"${OIDC_ARN}"'"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "'"${OIDC_ID}"':aud": "sts.amazonaws.com"
                    "'"${OIDC_ID}"':sub": "fluent-bit",
                }
            }
        }
    ]
}'
aws iam attach-role-policy --role-name wngnl_OpenSearch_Role --policy-arn arn:aws:iam::aws:policy/PowerUserAccess

 

Down File

wget https://raw.githubusercontent.com/wngnl-dev/AWS/main/EKS/OpenSearch/serviceaccount.yaml
wget https://raw.githubusercontent.com/wngnl-dev/AWS/main/EKS/OpenSearch/daemonset.yaml
wget https://raw.githubusercontent.com/wngnl-dev/AWS/main/EKS/OpenSearch/fluentbit.yaml

daemonset.yaml, serviceaccount.yaml, fluentbit.yaml을 수정하고 apply 해줍니다.

export CLUSTER_NAME=<클러스터 이름>
export LOGGING_ROLE=$(kubectl get sa fluent-bit -n default -o json |jq '.metadata.annotations."eks.amazonaws.com/role-arn"' -r)
export OPEN_SEARCH_ENDPOINT=<OpenSearch 앤드포인트>
export OPEN_SEARCH_MASTER_PASSWORD=<OpenSearch 비밀번호>

curl -sS -u "${OPEN_SEARCH_MASTER_USER}:${OPEN_SEARCH_MASTER_PASSWORD}" \
    -X PATCH ${OPEN_SEARCH_ENDPOINT}/_opendistro/_security/api/rolesmapping/all_access?pretty \
    -H 'Content-Type: application/json' \
    -d '[{"op": "add", "path": "/backend_roles", "value": [ "'${LOGGING_ROLE}'" ]}]'

OpenSearh 보안 역활 업데이트

kubectl logs daemonset.apps/fluent-bit

위의 명령어로 상태를 체크하고 아무 문제 없다면 

로드밸런서 OR 컨테이너에서 curl 을 보내 로그를 생성한 후 OpenSearch 도매인으로 접속해줍니다,

 

OpenSearch 설정

_dashboards/app/management/opensearch-dashboards/indexPatterns/create

위의 경로로 접속하여 로그 이름을 작성해줍니다       ex.  product-* 

 

Time field = @timestamp

Log 확인

 

Discover 로 이동하여 줍니다.

 

product-* 를 클릭하면 로그를 확인할 수 있습니다.

특정 Log 확인

메뉴 아래의 DevTools를 클릭하고

POST /<로그 이름>-*/_search
{
  "query": {
    "query_string": {
      "query": "<찾는 텍스트>"
    }
  }
}

위의 코드로 원하는 값을 찾을 수 있습니다.

값이 있는 경우

값이 없는 경우