로컬 Mac에 td-agent ( Fluentd )를 넣고 Amazon Athena에서 SQL 라이크로 로그를 추출할 때까지.
지금, 어느 곳에서
Rails 프로젝트가있었습니다.
거기에서는, aconsegui 라고 하는 gem 을 넣어, /log/development.log
에 원하는 로그 정보를 JSON 형식으로 보내고 있었습니다.
/config/initializers/lograge.rbRails.application.configure do
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Json.new
config.lograge.custom_options = lambda do |event|
{
user_id: event.payload[:user_id],
user_email: event.payload[:user_email],
}
end
end
/log/development.log# ...イメージ
{"method":"GET","path":"/dashboard/events","format":"json","controller":"DashboardController","action":"events","status":200,"duration":68.21,"view":0.44,"db":0.0,"user_id":"9999","user_email":"[email protected]"}
여기에 td-agent를 넣고 로그를 S3로 보내고 Amazon Athena에서 SQL과 같은 로그를 추출하는 것을 원합니다.
최종 이미지
먼저 td-agent (Fluentd)를 넣는 곳에서
Installing Fluentd using .dmg Installer (MacOS X) 여기에 쓰여진 대로 다운로드하고 td-agent를 넣습니다. 이건 빨리 빠져 들어갈 것 같아요.
다음에, fluent-plugin-s3
라고 하는 것을 넣고 싶습니다만, 이것이 어려웠습니다.
설치/opt/td-agent/usr/sbin/td-agent-gem install fluent-plugin-s3
결론, 위의 명령으로 갈 수 있습니다만,... 어쨌든 갈 수 있습니다.
ref. htp // // cs. f 엔 td. 오 rg / v0. s-ho w-do-i-do-t
(자신의 메모.아래의 파일로부터 /opt/td-agent/usr/sbin/td-agent
의 장소를 확인.)
/Library/LaunchDaemons/td-agent.plist<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>td-agent</string>
<key>ProgramArguments</key>
<array>
<string>/opt/td-agent/usr/sbin/td-agent</string>
<string>--log</string>
<string>/var/log/td-agent/td-agent.log</string>
<string>--use-v1-config</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/opt/td-agent</string>
</dict>
</plist>
계속해서 설정 파일을 씁니다.
여러가지 배우면서(빠르면서), 완성한 것이 아래입니다. (일단 이것으로, 하고 싶은 일은 할 수 있었습니다.)
/etc/td-agent/td-agent.conf<source>
type forward
</source>
<source>
type tail
tag lograge
format json
path {project-path}/log/development.log
pos_file {project-path}/log/development.log.pos
time_key time
</source>
<match lograge>
@type copy
<store>
@type stdout
</store>
<store>
@type s3
format json
aws_key_id {aws_access_key_id}
aws_sec_key {aws_secret_access_key}
s3_bucket {my_bucket_name}
s3_region ap-northeast-1
path lograge_logs/ # 任意に指定できます
buffer_path /var/log/fluent/lograge_s3 # 任意に指定できます
buffer_chunk_limit 100k
time_slice_format year=%Y/month=%m/day=%d/%Y%m%d-%H
utc
</store>
</match>
포인트 설명
Rails.application.configure do
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Json.new
config.lograge.custom_options = lambda do |event|
{
user_id: event.payload[:user_id],
user_email: event.payload[:user_email],
}
end
end
# ...イメージ
{"method":"GET","path":"/dashboard/events","format":"json","controller":"DashboardController","action":"events","status":200,"duration":68.21,"view":0.44,"db":0.0,"user_id":"9999","user_email":"[email protected]"}
먼저 td-agent (Fluentd)를 넣는 곳에서
Installing Fluentd using .dmg Installer (MacOS X) 여기에 쓰여진 대로 다운로드하고 td-agent를 넣습니다. 이건 빨리 빠져 들어갈 것 같아요.
다음에, fluent-plugin-s3
라고 하는 것을 넣고 싶습니다만, 이것이 어려웠습니다.
설치/opt/td-agent/usr/sbin/td-agent-gem install fluent-plugin-s3
결론, 위의 명령으로 갈 수 있습니다만,... 어쨌든 갈 수 있습니다.
ref. htp // // cs. f 엔 td. 오 rg / v0. s-ho w-do-i-do-t
(자신의 메모.아래의 파일로부터 /opt/td-agent/usr/sbin/td-agent
의 장소를 확인.)
/Library/LaunchDaemons/td-agent.plist<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>td-agent</string>
<key>ProgramArguments</key>
<array>
<string>/opt/td-agent/usr/sbin/td-agent</string>
<string>--log</string>
<string>/var/log/td-agent/td-agent.log</string>
<string>--use-v1-config</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/opt/td-agent</string>
</dict>
</plist>
계속해서 설정 파일을 씁니다.
여러가지 배우면서(빠르면서), 완성한 것이 아래입니다. (일단 이것으로, 하고 싶은 일은 할 수 있었습니다.)
/etc/td-agent/td-agent.conf<source>
type forward
</source>
<source>
type tail
tag lograge
format json
path {project-path}/log/development.log
pos_file {project-path}/log/development.log.pos
time_key time
</source>
<match lograge>
@type copy
<store>
@type stdout
</store>
<store>
@type s3
format json
aws_key_id {aws_access_key_id}
aws_sec_key {aws_secret_access_key}
s3_bucket {my_bucket_name}
s3_region ap-northeast-1
path lograge_logs/ # 任意に指定できます
buffer_path /var/log/fluent/lograge_s3 # 任意に指定できます
buffer_chunk_limit 100k
time_slice_format year=%Y/month=%m/day=%d/%Y%m%d-%H
utc
</store>
</match>
포인트 설명
/opt/td-agent/usr/sbin/td-agent-gem install fluent-plugin-s3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>td-agent</string>
<key>ProgramArguments</key>
<array>
<string>/opt/td-agent/usr/sbin/td-agent</string>
<string>--log</string>
<string>/var/log/td-agent/td-agent.log</string>
<string>--use-v1-config</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/opt/td-agent</string>
</dict>
</plist>
여러가지 배우면서(빠르면서), 완성한 것이 아래입니다. (일단 이것으로, 하고 싶은 일은 할 수 있었습니다.)
/etc/td-agent/td-agent.conf
<source>
type forward
</source>
<source>
type tail
tag lograge
format json
path {project-path}/log/development.log
pos_file {project-path}/log/development.log.pos
time_key time
</source>
<match lograge>
@type copy
<store>
@type stdout
</store>
<store>
@type s3
format json
aws_key_id {aws_access_key_id}
aws_sec_key {aws_secret_access_key}
s3_bucket {my_bucket_name}
s3_region ap-northeast-1
path lograge_logs/ # 任意に指定できます
buffer_path /var/log/fluent/lograge_s3 # 任意に指定できます
buffer_chunk_limit 100k
time_slice_format year=%Y/month=%m/day=%d/%Y%m%d-%H
utc
</store>
</match>
포인트 설명
@type stdout
그리고, /var/log/td-agent/td-agent.log
에 로그가 흘러 오므로, 이것을 tail -f
하면서 작업을 진행했습니다. format json
에서 JSON 형식으로 (여분의 날짜와 시간 데이터 등을 포함하지 않는 형태로) 내뿜어줍니다. @type copy
에서 여러 출력을 제공합니다. ( stdout 및 s3 로의 토출 ) @type copy
의 존재를 만날 때까지, 나는 일방에 나타나지 않는 로그를 영원히 기다리고 있었습니다. (이런 식으로 쓰고 있었던 것입니다.)
<match lograge>
@type stdout
</match lograge>
<match lograge>
@type s3
省略
</match>
td-agent를 이동하십시오.
움직이다sudo launchctl load /Library/LaunchDaemons/td-agent.plist
멈추다sudo launchctl unload /Library/LaunchDaemons/td-agent.plist
설정 파일 td-agent.conf
를 잡으면 위의 명령으로 "멈추고"・ "동작하여"반영시킵니다. reload 같은 커맨드 없는 것일까 하고, &&
로 연결해 수제 리로드 커멘드를 몇번이나 두드렸습니다.
이상으로, /log/development.log
의 JSON 형식의 로그가, S3://lograge
에 업 되게 되었습니다.
awscli에서 확인$ aws s3 ls --recursive s3://my-bucket-name
2017-02-02 17:10:27 270 lograge_logs/year=2017/month=02/day=02/20170202-07_0.gz
2017-02-02 18:10:58 2580 lograge_logs/year=2017/month=02/day=02/20170202-08_0.gz
2017-02-02 19:10:31 757 lograge_logs/year=2017/month=02/day=02/20170202-09_0.gz
Amazon Athena 설정하기
쿼리가 걸리므로 create database hoge
등으로 데이터베이스를 만듭니다.
그리고 테이블도 쿼리로 만들어집니다만, 그것은 힘들 것 같기 때문에, Catalog Manager
메뉴로부터 만듭니다.
길을 따라 가면 목표에 붙습니다. 요점은 포머를 JSON으로 유지하는 것입니다. 이제 정규 표현식을 골고루 쓰지 않아도 됩니다. 옆자리의 CTO가 정규식에 굉장히 시간이 걸렸다고 말했기 때문에 이를 피할 수 있어서 좋았습니다. (아무래도 단순한 정규 표현이 아니고, 버릇이 있어, \\d
등이라고 써야 하는 것 같습니다.)
년・월・일로 파티션을 끊고 있으므로, 이하의 커멘드로 반영시킵니다. (조금 여기 공부 부족으로 상세히 알 수 없습니다.)
MSCK REPAIR TABLE database_name.table_name;
# 確認
show partitions database_name.table_name;
나머지는 쿼리를 두드리는 것입니다.
가장 첫 번째 캡처 거리입니다. select * from table_name;
이제 원하는 데이터를 얻을 수 있습니다.
이상입니다.
도중에, 여러가지 빠졌습니다만, 무사히 하고 싶은 곳까지 할 수 있어서 좋았습니다. 오늘은 이미 사우나에 들어가 몸을 정돈해 하지만 마시고 싶습니다.
내일 이후에는, 이것들을 itamae라든지, 리모트 구축할 수 있도록(듯이) 해야 합니다.
고마워요.
Reference
이 문제에 관하여(로컬 Mac에 td-agent ( Fluentd )를 넣고 Amazon Athena에서 SQL 라이크로 로그를 추출할 때까지.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mochizukikotaro/items/30b77895f265513c96c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sudo launchctl load /Library/LaunchDaemons/td-agent.plist
sudo launchctl unload /Library/LaunchDaemons/td-agent.plist
$ aws s3 ls --recursive s3://my-bucket-name
2017-02-02 17:10:27 270 lograge_logs/year=2017/month=02/day=02/20170202-07_0.gz
2017-02-02 18:10:58 2580 lograge_logs/year=2017/month=02/day=02/20170202-08_0.gz
2017-02-02 19:10:31 757 lograge_logs/year=2017/month=02/day=02/20170202-09_0.gz
쿼리가 걸리므로
create database hoge
등으로 데이터베이스를 만듭니다.그리고 테이블도 쿼리로 만들어집니다만, 그것은 힘들 것 같기 때문에,
Catalog Manager
메뉴로부터 만듭니다.길을 따라 가면 목표에 붙습니다. 요점은 포머를 JSON으로 유지하는 것입니다. 이제 정규 표현식을 골고루 쓰지 않아도 됩니다. 옆자리의 CTO가 정규식에 굉장히 시간이 걸렸다고 말했기 때문에 이를 피할 수 있어서 좋았습니다. (아무래도 단순한 정규 표현이 아니고, 버릇이 있어,
\\d
등이라고 써야 하는 것 같습니다.)년・월・일로 파티션을 끊고 있으므로, 이하의 커멘드로 반영시킵니다. (조금 여기 공부 부족으로 상세히 알 수 없습니다.)
MSCK REPAIR TABLE database_name.table_name;
# 確認
show partitions database_name.table_name;
나머지는 쿼리를 두드리는 것입니다.
가장 첫 번째 캡처 거리입니다. select * from table_name;
이제 원하는 데이터를 얻을 수 있습니다.
이상입니다.
도중에, 여러가지 빠졌습니다만, 무사히 하고 싶은 곳까지 할 수 있어서 좋았습니다. 오늘은 이미 사우나에 들어가 몸을 정돈해 하지만 마시고 싶습니다.
내일 이후에는, 이것들을 itamae라든지, 리모트 구축할 수 있도록(듯이) 해야 합니다.
고마워요.
Reference
이 문제에 관하여(로컬 Mac에 td-agent ( Fluentd )를 넣고 Amazon Athena에서 SQL 라이크로 로그를 추출할 때까지.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mochizukikotaro/items/30b77895f265513c96c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(로컬 Mac에 td-agent ( Fluentd )를 넣고 Amazon Athena에서 SQL 라이크로 로그를 추출할 때까지.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mochizukikotaro/items/30b77895f265513c96c5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)