Rails: Filebeat 및 유연한 스택이 있는 검색 로그
10792 단어 webdevrailsrubyelasticsearch
본고에서, 나는 Filebeat을 사용하여 rails 로그를 검색할 수 있는 방법과 UI를 지원하는 로그 검색을 통해 디버깅을 신속하고 간단하게 하는 방법을 간략하게 소개할 것이다.등등, Filebeat는 단독 실체가 아닙니다. 이것은 탄력적인 창고에 속합니다. 이것은 경량급 로그 탁송인입니다. 자원을 비축하지 않습니다.
이 문장은 다음과 같은 내용을 포함할 것이다
신축성 스태킹 소개
Elastic stack은 Elasticsearch, Kibana, Beats과 Logstash으로 구성되어 있으며 이전에는 ELK stack이라고 불렸는데 실시간 모니터링, 시각화, 검색과 분석 응용 프로그램 데이터에 사용되었고 Filebeat는 Beats family에 속하는 경량급 데이터 탁송인으로 주로 파일에서 데이터를 보내는 데 사용되었다.
Filebeat 설정 및 구성
장치
filebeat의 설치는 매우 간단합니다.당신은 공식 documentation에서 기술한 간단한 절차에 따라 조작할 수 있습니다.
서류 박자 견본.yml–/usr/local/etc/filebeat/filebeat.yml
#---------- Filebeat inputs ----------
filebeat.inputs:
- type: log
enabled: true
json:
message_key: message
keys_under_root: true
overwrite_keys: true
paths:
- /Users/pramod/projects/efk-rails/log/sync_development.log
#ElasticSearch template setting
setup.ilm.enabled: false
setup.template.enabled: false
setup.template.name: "efk-rails-sync-dev"
setup.template.pattern: "efk-rails-sync-dev-*"
#---------- Kibana ----------
setup.kibana:
host: "0.0.0.0:5601"
#---------- Elasticsearch output ----------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["0.0.0.0:9200"]
index: "sync-log-dev"
위의 프로필에서 우리는 다음과 같은 옵션을 설정하였다스크롤이 있는 사용자 정의 색인 템플릿
물론 기본 template과 rollover 옵션을 사용할 수 있지만 사용자 정의 색인 템플릿 이름을 사용할 수 없습니다. 만약에 키바나와elasticsearch 실례에 환경 스마트 키바나 계기판을 설치하기를 원한다면 이것은 특히 필요합니다. 이것은 대부분의 Rails 응용 프로그램에서 필요한 것입니다.
여기에서, 우리는 맞춤형 템플릿과 인덱스 생명주기 관리 (ilm) 를 사용하여 서로 다른 rails 환경에 따라 로그 인덱스를 회전시킬 것입니다.
사용자 정의 색인 템플릿 이름과 rollover policy을 사용하려면 다음과 같은 절차를 따라야 한다
setup.ilm.enabled: false
setup.template.enabled: false
setup.template.name: "efk-rails-sync-dev"
setup.template.pattern: "efk-rails-sync-dev-*"
위의 설정은 filebeat에 efk rails sync dev와 efk rails sync dev-* 이름과 인덱스 모드를 각각 사용하도록 알려 줍니다. 일반적인 방법은 인덱스 이름을 사용하지 않고 인덱스 모드를 지정하는 것입니다.PUT _ilm/policy/sync-log
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_age": "3d",
"max_size": "100mb"
}
}
},
"delete": {
"min_age": "2d",
"actions": {
"delete": {}
}
}
}
}
}
색인 생명주기 정책을 만들 것입니다. 이 정책은 색인 크기가 100mb에 달하거나 색인 기한이 3일일 때 색인을 스크롤합니다.PUT _template/efk-rails-sync-dev
{
"index_patterns": ["efk-rails-sync-dev-*"],
"settings": {
"number_of_shards": 1,
"index.lifecycle.name": "sync-log",
"index.lifecycle.rollover_alias": "sync-log-dev"
}
}
이것은 인덱스 별명이 efk-rails-sync-dev
인 템플릿 sync-log-dev
을 만들고 2단계에서 만든 라이프 사이클 정책 sync-log
을 추가합니다.PUT efk-rails-sync-dev-000001
{
"aliases": {
"sync-log-dev":{
"is_write_index": true
}
}
}
이것은 초기 인덱스 efk-rails-sync-dev-000001
을 만들고 filebeat는 이 인덱스를 사용하여 프로그램의 출력을 기록합니다.JSON 형식의 응용 프로그램 로그
색인 생명주기 정책, 템플릿, 첫 번째 스크롤 색인을 만들면 filebeat Harvester에서 로그를 포착합니다.응용 프로그램 로그를 JSON 형식으로 출력해야 합니다.
rails 로그를 JSON 형식으로 출력하려면 Gemfile에 추가하고 번들로 설치하면 애플리케이션에서 사용할 수 있는 logragegem을 사용합니다.
데모 목적으로 단일 컨트롤러 작업만 JSON에 기록하고 Kibana를 통해 검색합니다.
다음 lograge 구성은 SyncController# 인덱스와 SyncController# 생성 작업의 로그를 JSON 형식으로 출력합니다.
$config/initializers/lograge.rb
Rails.application.configure do
config.lograge.enabled = true
config.lograge.keep_original_rails_log = true
config.lograge.base_controller_class = 'ActionController::API'
config.lograge.logger = ActiveSupport::Logger.new "#{Rails.root}/log/sync_#{Rails.env}.log"
config.lograge.formatter = Lograge::Formatters::Json.new
config.lograge.ignore_custom = lambda do |event|
# return true here if you want to ignore based on the event
return false if event.payload[:controller].include?("SyncController") &&
['index', 'create'].include?(event.payload[:action])
return true
end
config.lograge.custom_payload do |controller|
if controller.class.name.include?('SyncController')
SyncLogger.new(controller).log_data
end
end
end
SyncLogger 서비스는 레코더 파일에 메타데이터를 추가합니다.$app/services/sync_logger.rb
class SyncLogger
def initialize(controller)
@controller = controller
end
def log_data
request_type = @controller.request.method
username = @controller.current_user.try(:username) || 'guest'
r_data = request_type == 'GET' ? JSON.parse(@controller.response.body) : @controller.request.parameters
log_data = {
u_agent: @controller.request.user_agent,
request_time: Time.now.to_s(:number),
search_key: "#{request_type}_#{username}_#{Time.zone.now.to_s(:number)}",
ip: @controller.request.ip,
user_id: @controller.current_user.try(:id),
username: username,
data: r_data
}
end
end
상기 서비스는 다음 형식으로 SyncController#index와 SyncController#create action으로 JSON 출력을 만들 것입니다$log/sync 개발.저널
{"method":"GET","path":"/sync","format":"*/*","controller":"SyncController","action":"index","status":200,"duration":16.64,"view":1.18,"db":0.2,"u_agent":"PostmanRuntime/7.26.1","request_time":"20200818210529","search_key":"GET_pramod_20200818153529","ip":"127.0.0.1","user_id":1,"username":"pramod","data":[{"username":"pramod"},{"username":"pramdo1"}]}
{"method":"GET","path":"/sync","format":"*/*","controller":"SyncController","action":"index","status":200,"duration":15.82,"view":0.48,"db":0.93,"u_agent":"PostmanRuntime/7.26.1","request_time":"20200818210647","search_key":"GET_pramod_20200818153647","ip":"127.0.0.1","user_id":1,"username":"pramod","data":[{"username":"pramod"},{"username":"pramdo1"}]}
Starting filebeat filebeat의 루트 디렉터리에서 다음 명령을 실행하여 이 로그를elasticsearch로 보냅니다. tar를 다운로드하고 추출하거나 filebeat를 서비스로 설치했다면 filebeat를 서비스로 시작할 수 있습니다../filebeat -e
or
sudo service filebeat start
successful에서 다음 filebeat 로그를 보셔야 합니다로그 출력
INFO registrar/registrar.go:152 States Loaded from registrar: 2
2020-08-18T21:46:30.722+0530 INFO crawler/crawler.go:72 Loading Inputs: 1
2020-08-18T21:46:30.723+0530 INFO log/input.go:152 Configured paths: [/Users/pramod/projects/efk-rails/log/sync_development.log]
2020-08-18T21:46:30.723+0530 INFO input/input.go:114 Starting input of type: log; ID: 15918551478222648142
2020-08-18T21:46:30.723+0530 INFO crawler/crawler.go:106 Loading and starting Inputs completed. Enabled inputs: 1
기바나가 움직이고 있어요.
위의 설정이 올바르면 Kibana 검색 로그를 통해 색인 모드를 만들 수 있습니다.키바나 인덱스 관리에서
efk-rails-sync-dev-000001
인덱스를 볼 수 있으며 같은 인덱스를 사용하면 검색에 사용할 인덱스 모드를 만들 수 있습니다.키바나 검색을 통해서.
그래, 우리는 완성했어!상기 절차를 따르면 프로그램에서 비슷한 설정을 실행할 수 있어야 합니다.만약 어떤 의문이나 건의가 있으면, 평론 부분에서 저에게 알려 주십시오.
Reference
이 문제에 관하여(Rails: Filebeat 및 유연한 스택이 있는 검색 로그), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pramodshinde7/searchable-logs-with-filebeat-and-elastic-stack-2enc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)