MongoDB Atlas에서 로그 자동 다운로드

MongoDB Atlas 는

  • 프로세스 로그는 JSON 형식으로 인쇄되는 서버 로그라고도 합니다.프로세스 로그에는 문제, 연결 등의 항목이 포함될 수 있습니다. 메시지는 다음과 같습니다.
  • {"t":{"$date":"2020-05-01T15:16:17.180+00:00"},"s":"I", "c":"NETWORK", "id":12345, "ctx":"listener", "msg":"Listening on","attr":{"address":"127.0.0.1"}}
    
    자료 출처: MongoDB LOG MESSAGES

  • 감사 로그는 이 로그를 활성화하고 MongoDB Atlas 클러스터 내의 명령, 소스 IP 등 사용자 작업을 감사할 수 있도록 허용해야 합니다
  • .
    Enabling auditing logs에 대한 정보

    이 두 가지 로그에는 다음과 같은 몇 가지 고려 사항이 있습니다.

  • 로그의 유효기간은 30일입니다. 따라서 더 많은 로그가 필요하면 로그 파일을 다운로드할 수 있는 절차가 필요합니다.너는 이 파일들을 수동으로 다운로드할 수 있지만, 솔직히 말하면, 너는 때때로 다운로드를 잊어버릴 것이다.
  • 로그를 에서 다운로드합니다.gz
  • 는 집단 내의 모든 노드에 로그를 생성하고 집단에 3개의 노드가 있으면 3개의 로그 파일을 생성합니다.큰 로그 파일은 주 노드에 대응하는 로그 파일이 될 것입니다.
  • 로그 파일을 다운로드하려면 최소한 프로젝트 read access를 요구해야 하지만 심사 로그를 사용하려면 프로젝트 owner가 필요합니다.
  • 클러스터 유형 M0 및 M2/M5는 다운로드 가능한 로그를 제공하지 않으므로 샌드박스 또는 무료 클러스터에서 로그 항목을 복제할 수 없습니다.
  • MongoDB AtlasHERE에서 로그 파일을 수동으로 다운로드하는 방법에 대한 자세한 내용

    우리가 전에 말했듯이...


    매일 로그 파일을 다운로드하는 것은 적어도 시간을 소모할 뿐만 아니라, 유지하기도 매우 어렵다.

    네가 할 수 있는 가장 간단한 일은 스크립트로 이 파일을 자동으로 다운로드하는 것이다. 이것이 바로 우리가 해야 할 일이다.다음과 같이 가정해 보겠습니다.

  • MongoDB Atlas에 클러스터가 있습니다.
  • 클라우드 공급업체로 AWS를 사용하고 있습니다.아마도 장래에 나는 다른 클라우드 서비스 공급자를 위해 이 코드를 수정할 것이다. 그러나 이번에는 AWS의 일부 서비스를 사용할 것이다.
  • Linux EC2 인스턴스에서 매일 실행되는 간단한 스크립트입니다.
  • 사용자는 EC2 인스턴스가 다음 AWS 리소스에 액세스할 수 있도록 인스턴스 구성 파일에 액세스합니다.

  • AWS S3 스토리지 로그 파일

  • Mongo DB Atlas 클러스터에 연결할 수 있는 키를 저장하는 AWS 매개 변수 저장소입니다.
  • MongoDB Atlas는 다음 방법 중 하나를 통해 AWS 인프라와 연결합니다.

  • VPC 피어 연결, Mongo AtlasHERE에서 피어 연결 구성에 대한 추가 정보

  • 실례에 공공 IP를 추가하고 MongoDB Atlas HERE 에서 이 공공 IP를 사용합니다. 이렇게 하는 것을 권장하지 않습니다.
  • 그러나 우선, 너는 약간의 선결 조건이 필요하다

  • EC2 인스턴스 생성 및 설치

  • Mongo CLI .

  • AWS CLI AWS CLI가 AMazon Linux에 설치되어 있습니다.
  • 스토리지 로그를 생성하는 S3 스토리지 통

  • Create a PArameter store Mongo Atlas 키를 저장합니다.
  • 다음 권한을 사용하여 인스턴스 구성 파일을 정의합니다.
  • s3:Read*
    s3:Write*
    "ssm:GetParameters"
    
    참고 리소스를 제공할 때는 리소스를 사용하는 특정 ARN에 유의하십시오.
  • 클러스터에 연결된 API 키 생성
  • Image description
    권한을 할당하려면 다음과 같이 하십시오.

    생성된 키와 개인 키를 매개 변수 저장소에 저장합니다.키: 값으로 값을 저장하는 것을 기억하세요.
    {
      cluster_id: "your cluster id",
      public_key: "your public api key from atlas",
      private_key: "your private api key from atlas"
    }
    

    이제 이 모든 게 준비됐어...


    코드로 이동합니다.
    #! /bin/bash -e
    
    CLUSTERID=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "cluster_id" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    PUBLICKEY=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "public_key" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    PRIVATEKEY=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "private_key" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    CURRENTDATE=`date +%Y%m%d`
    NOW=`date '+%F_%H:%M:%S'`
    declare -a StringArray=("node-00-00.snvtr.mongodb.net" "node-00-01.snvtr.mongodb.net" "node-00-02.snvtr.mongodb.net")
    
    for hostname in ${StringArray[@]}; do
      echo "Obtaining logs from ${hostname}"
      curl --user ${PUBLICKEY}:${PRIVATEKEY} --digest \
        --header 'Accept: application/gzip' \
        --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/${CLUSTERID}/clusters/${hostname}/logs/mongodb.gz" \
        --output "mongodb-${hostname}-${CURRENTDATE}.gz"
    
      echo "Uploading logs from ${hostname}"
      aws s3 mv "mongodb-${hostname}-${CURRENTDATE}.gz" s3://mongodb-logs/mongodblogs/${NOW}/mongodb-${hostname}-${CURRENTDATE}.gz
    done
    
    for hostname in ${StringArray[@]}; do
      echo "Obtaining Audit logs from ${hostname}"
      curl --user ${PUBLICKEY}:${PRIVATEKEY} --digest \
        --header 'Accept: application/gzip' \
        --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/${CLUSTERID}/clusters/${hostname}/logs/mongodb-audit-log.gz" \
        --output "mongodb-audit-log-${hostname}-${CURRENTDATE}.gz"
    
      echo "Uploading Audit logs from ${hostname}"
      aws s3 mv "mongodb-audit-log-${hostname}-${CURRENTDATE}.gz" s3://mongodb-logs/mongodblogs/${NOW}/mongodb-audit-log-${hostname}-${CURRENTDATE}.gz
    done
    
    echo ""
    echo "End of script execution..."
    

    각 부분 다 보여주세요.


    #! /bin/bash -e
    
    CLUSTERID=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "cluster_id" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    PUBLICKEY=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "public_key" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    PRIVATEKEY=$(aws ssm get-parameters --names "mongodb-atlas-key" --with-decryption --query 'Parameters[*].Value' --output text | grep "private_key" | cut -f2 -d ":" | cut -d "\"" -f2)
    
    CURRENTDATE=`date +%Y%m%d`
    NOW=`date '+%F_%H:%M:%S'`
    declare -a StringArray=("node-00-00.snvtr.mongodb.net" "node-00-01.snvtr.mongodb.net" "node-00-02.snvtr.mongodb.net")
    
    이 섹션에서는 변수를 설명합니다.
  • CLUSTERID: 이 값은 매개변수 저장소에서 직접 가져옵니다. 이 값은 복호화되고 잘라집니다.
  • 공개 키: 이 값은 매개 변수 저장소에서 가져오고 복호화되어 변수에 분배됩니다.
  • PRIVATEKEY:aws cli 명령aws ssm get-parameters
  • 을 사용하여 매개 변수 저장소에서 이 값을 가져옵니다.
  • CURRENTDATE와 NOW는 로그 파일을 s3 메모리 통에 저장하는 데 사용되는 변수입니다.
  • 우리는 집단 노드 이름의 수조도 성명했다.이 값을 다른 매개 변수 저장소에 저장할 수도 있지만, 이것은 중요하지 않기 때문에 다운로드하고 여기에 쓸 수 있습니다.
  • 알 수 있는 바와 같이, 이 방법들은 코드에서 관건적인 정보를 배제할 수 있습니다. 만약 이 정보가 변경된다면, 매개 변수 저장소에서 변경하기만 하면 됩니다.새로운 실행은 새로운 값을 얻을 것입니다.
    for hostname in ${StringArray[@]}; do
      echo "Obtaining logs from ${hostname}"
      curl --user ${PUBLICKEY}:${PRIVATEKEY} --digest \
        --header 'Accept: application/gzip' \
        --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/${CLUSTERID}/clusters/${hostname}/logs/mongodb.gz" \
        --output "mongodb-${hostname}-${CURRENTDATE}.gz"
    
      echo "Uploading logs from ${hostname}"
      aws s3 mv "mongodb-${hostname}-${CURRENTDATE}.gz" s3://mongodb-logs/mongodblogs/${NOW}/mongodb-${hostname}-${CURRENTDATE}.gz
    done
    
    이 for 순환은 노드 이름을 옮겨다니며 프로세스 로그를 다운로드합니다
    그리고 로컬 메모리를 실례에 저장한 다음 날짜와 호스트 이름을 사용하여 s3 메모리통으로 이동합니다.
    기본적으로 MongoDB Atlas에 대해 API 호출을 하고 생성된 키를 사용하여 자신을 인증하고 있습니다.
    for hostname in ${StringArray[@]}; do
      echo "Obtaining Audit logs from ${hostname}"
      curl --user ${PUBLICKEY}:${PRIVATEKEY} --digest \
        --header 'Accept: application/gzip' \
        --request GET "https://cloud.mongodb.com/api/atlas/v1.0/groups/${CLUSTERID}/clusters/${hostname}/logs/mongodb-audit-log.gz" \
        --output "mongodb-audit-log-${hostname}-${CURRENTDATE}.gz"
    
      echo "Uploading Audit logs from ${hostname}"
      aws s3 mv "mongodb-audit-log-${hostname}-${CURRENTDATE}.gz" s3://mongodb-logs/mongodblogs/${NOW}/mongodb-audit-log-${hostname}-${CURRENTDATE}.gz
    done
    
    이 for 순환은 노드 이름을 옮겨다니며 감사 로그를 다운로드합니다
    그리고 로컬 메모리를 실례에 저장한 다음 날짜와 호스트 이름을 사용하여 s3 메모리통으로 이동합니다.
    매일 실행할 수 있도록 이 스크립트를 가져오고cronjob에 넣을 수 있습니다.
    우리는 로그의 시간 범위를 정의하지 않았습니다. 기본적으로 24시간입니다. 매일 이 스크립트를 실행하면 지난 24시간의 로그를 불러옵니다.

    프로그래밍 API 키

    좋은 웹페이지 즐겨찾기