EC2(AmazonLinux2)의 로그를 KinesisFireHose에 흘려 S3에 축적한다

우선은 EC2에서 Kinesis에 full 액세스 역할을 준비.

그런 다음 S3 버킷과 FireHose 스트림 생성. FireHose IAM 목록은 여기에서 만들 수 있다.

이하, EC2의 설정.
여기에서는 Apache에의 액세스 로그를 소재로 하고 있다.
$ sudo yum -y install httpd
$ sudo systemctl enable httpd
$ sudo systemctl start httpd

$ sudo vi /etc/httpd/conf/httpd.conf
:set number 로 행 수를 표시할 수 있다. :197 에서 197행째로 날 수 있다.

197행째에 추가
LogFormat "time:%t\tforwardedfor:%{X-Forwarded-For}i\thost:%h\treq:%r\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tua:%{User-Agent}i\treqtime_microsec:%D\tcache:%{X-Cache}o\truntime:%{X-Runtime}o\tvhost:%{Host}i" ltsv

219행에 추가
LogFormat "time:%t\tforwardedfor:%{X-Forwarded-For}i\thost:%h\treq:%r\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tua:%{User-Agent}i\treqtime_microsec:%D\tcache:%{X-Cache}o\truntime:%{X-Runtime}o\tvhost:%{Host}i" ltsv
$ sudo systemctl restart httpd
$ sudo chmod 755 /var/log/httpd
$ sudo chmod 644 /var/log/httpd/access_log
$ sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

$ sudo vi /etc/aws-kinesis/agent.json

/etc/aws-kinesis/agent.json
{
  "cloudwatch.emitMetrics": false,
  "firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com",
  "flows": [
    {
      "filePattern": "/var/log/httpd/access_log_ltsv",
      "deliveryStream": "作成したstream名"
    }
  ]
}
$ sudo systemctl restart aws-kinesis-agent
$ sudo systemctl enable aws-kinesis-agent
aws-kinesis-agent.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig aws-kinesis-agent on

$ sudo tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log
2020-02-15 13:48:42.192+0000  (FileTailer[fh:xxxx:/var/log/httpd/access_log_ltsv].MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.tailing.FileTailer [INFO] FileTailer[fh:xxxx:/var/log/httpd/access_log_ltsv]: Tailer Progress: Tailer has parsed 3 records (985 bytes), transformed 0 records, skipped 0 records, and has successfully sent 0 records to destination.
2020-02-15 13:48:42.198+0000  (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 3 records parsed (985 bytes), and 0 records sent successfully to destinations. Uptime: 120058ms
2020-02-15 13:48:51.186+0000  (sender-0) com.amazon.kinesis.streaming.agent.UserDefinedCredentialsProvider [INFO] No custom implementation of credentials provider present in the config file
2020-02-15 13:49:12.193+0000  (FileTailer[fh:xxxx:/var/log/httpd/access_log_ltsv].MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.tailing.FileTailer [INFO] FileTailer[fh:xxxx:/var/log/httpd/access_log_ltsv]: Tailer Progress: Tailer has parsed 3 records (985 bytes), transformed 0 records, skipped 0 records, and has successfully sent 3 records to destination.
2020-02-15 13:49:12.198+0000  (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 3 records parsed (985 bytes), and 3 records sent successfully to destinations. Uptime: 150058ms

잠시 후 ○ records sent successfully to destinations 가 되어 FireHose측에 흘러 온 것을 확인할 수 있다. 그 후 약 5분하여 S3에 데이터가 날았다. 아무래도 S3에의 송신은 약간의 러그가 있는 것 같다.

모니터링



추가

FireHose에서 빨아 들여 S3에 둔 tsv 형식의 로그 데이터를 Athena로부터 쿼리를 걸어 보았다.
참고) htps //w w.ぢ. 이. jp / 미소 / 아마 존 - 아테나 - s3 - sql

Athena 콘솔의 [create table]에서 s3을 선택하고 DB 이름, 테이블 이름을 결정한 후 대상 버킷의 주소를 지정합니다. 데이터를 모두 성형해주는 것 같다.)

파일 형식을 tsv로 선택하고 열 이름과 데이터 형식을 한꺼번에 지정합니다. (컬럼수가 많다면 bulk를 선택해 하는 편이 편하다.)

작성 후, SELECT * FROM テーブル名


제대로 나왔다.
로그 파일의 포맷을 스스로 성형해 주면, 향후는 EC2 토하는 로그를 Athena로 읽을 수 있을 것 같다.

참고
  • htps //w w. 유우누 x. 토키 / 14332 /
  • htps //w w.ぢ. 이. jp / 미소 / 아마 존 - 아테나 - s3 - sql
  • 좋은 웹페이지 즐겨찾기