ELASTICSEARCH, LOGSTASH, KIBANA, 고효율 로그 관리 시스템 구축
24420 단어 구조
ELK(ElasticSearch, LogStash 및 Kibana) 세 가지 조합은 매우 강력한 도구입니다. 여기서 우리는 로그 파일을 감시하고 로그를 ElasticSearch 검색엔진에 받아서 Kibana 시각화 도구를 이용하여 ElasticSearch 조회를 실현합니다.
ElasticSearch
공식 설명
Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.
설치
공식 다운로드 주소https://www.elastic.co/cn/downloads/elasticsearch자신의 시스템 버전에 따라 다운로드 설치, 개인용 컴퓨터 시스템 Ubuntu18.04 따라서 Linux를 선택하려면 자신의 운영체제에 따라 적당한 버전을 선택하여 다운로드하십시오.
다운로드 완료 후 압축 풀기 사용, 압축 풀기 완료 후 파일 디렉터리는 다음과 같습니다.├── bin
├── config
├── data
├── lib
├── LICENSE.txt
├── logs
├── modules
├── node-slaver-1
├── NOTICE.txt
├── plugins
└── README.textile
그 중에서 우리가 사용하는 명령은 bin
디렉터리에 있고, 프로필은 config
디렉터리에 있으며, 압축 해제된 파일을 자신의 홈 디렉터리에 두어 권한이 부족한 오류 문제를 방지하는 것을 권장합니다.
프로비저닝
config
디렉터리에 들어가면 파일 목록은 다음과 같습니다.├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles
ElasticSerach 프로필elasticsearch.yml
, JVM 프로필jvm.options
, 로그 인쇄 프로필log4j2.properties
에 중점을 두고 있습니다.
이러한 프로필에서 알 수 있듯이 ElasticSearch와 자바는 매우 큰 관계를 가진다. 예, ElasticSearch는 자바 가상 기기에서 실행되는 시스템입니다.
elasticSearch.yml 프로필
이 파일의 대부분은 다음과 같은 주요 관심사에 대한 설명입니다.
├── bin
├── config
├── data
├── lib
├── LICENSE.txt
├── logs
├── modules
├── node-slaver-1
├── NOTICE.txt
├── plugins
└── README.textile
├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles
JVM 구성 파일
여기에서 우리는 주로 메모리 크기를 설정하여 자신의 하드웨어 설정에 따라 ElasticSearch의 메모리 크기를 조정합니다. (일반적으로 수정할 필요가 없습니다. 컴퓨터의 설정이 좋거나 설정이 약간 낮지 않으면 이 메모리 파라미터를 수정해야 합니다.)
다른 매개변수는 당분간 수정할 필요가 없습니다.
로그 구성
로그 설정은 일반적으로 변경할 필요가 없습니다. 로그의 형식 등 정보를 수정할 수 있습니다. Log4J의 로그 형식 명령을 참고하여 설정할 수 있습니다. 여기는 너무 많은 설명을 하지 않습니다.
테스트
구성이 완료되면
bin
디렉터리에 들어가서 elasticSearch
명령을 실행합니다./elasticsearch
start 글자를 보고 브라우저나 터미널에서 접근http://localhost:9200
( ElasticSearch , 9200 )
현재 ElasticSearch 노드에 대한 정보는 다음과 같습니다.{
"name": "node-master",
"cluster_name": "cluster-dev",
"cluster_uuid": "i1ti04HsQA6TK_ywrabGlA",
"version": {
"number": "6.4.1",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "e36acdb",
"build_date": "2018-09-13T22:18:07.696808Z",
"build_snapshot": false,
"lucene_version": "7.4.0",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}
ElasticSearch의 다른 사용 방법은 이 글을 참고하십시오. ElasticSearch에서 자주 사용하는 명령
Kibana
Kibana lets you visualize your Elasticsearch data and navigate the Elastic Stack, so you can do anything from learning why you’re getting paged at 2:00 a.m. to understanding the impact rain might have on your quarterly numbers.
Kibana: ElasticSearch의 시각화 도구입니다. Kibana를 설치하는 것은 간단합니다. 설치 패키지를 다운로드하고 압축을 풀고 설정하고 실행하면 됩니다.
설치
공식 다운로드 주소https://www.elastic.co/cn/downloads/kibana자체 시스템 버전 다운로드 설치, 개인용 컴퓨터 시스템 Ubuntu 18.04 LINUX-64-BIT 선택, 사용자 운영 체제에 따라 적절한 버전 다운로드
압축 해제 후의 디렉터리 구조는.
├── bin
├── config
├── data
├── LICENSE.txt
├── node
├── node_modules
├── NOTICE.txt
├── optimize
├── package.json
├── plugins
├── README.txt
├── src
├── webpackShims
└── yarn.lock
ElasticSearch 디렉터리와 유사한 구조로 bin
및 config
디렉터리는 우리가 중점적으로 주목하는 것이다
프로비저닝
config 디렉터리를 열고 유일한 파일 kibana.yml
을 편집합니다. 그 중 몇 개의 매개 변수는 우리가 관심을 가져야 합니다.
.
├── bin
├── config
├── data
├── LICENSE.txt
├── node
├── node_modules
├── NOTICE.txt
├── optimize
├── package.json
├── plugins
├── README.txt
├── src
├── webpackShims
└── yarn.lock
테스트
Kibana의 bin 디렉터리로 돌아가서 실행
./kibana
하면 브라우저 액세스를 열 수 있습니다(http://localhost:5601) Kibana 관리 인터페이스에 들어갈 수 있습니다. 여기서 우리는 DevTools 기능, 기타 통계 등 기능을 사용하기만 하면 연구 학습을 하지 않습니다.DevTools 명령에서 ElasticSearch 명령을 매우 편리하게 사용할 수 있고 하이라이트와 알림을 매우 편리하게 사용할 수 있습니다.
LogStash
Logstash is an open source, server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to your favorite “stash.” (Ours is Elasticsearch, naturally.)
설치
공식 다운로드 주소https://www.elastic.co/downloads/logstash사용자 시스템 버전에 따라 다운로드 설치, 개인 컴퓨터 시스템 Ubuntu18.04 따라서 ZIP 선택 사용자 운영 체제에 따라 적절한 버전 다운로드
그리고 스트레스 해소 준비.
프로비저닝
LogStash 내부에는 Kafka, ElasticSearch, Redis, Nginx 등을 포함하여 지원 파일, 단말기 등을 입력하면 로그 파일을 모의한 다음에 Logstash를 이용하여 변환을 수집하여 ElasticSearch로 규정합니다.
사용자 정의 로그 스크립트 만들기
먼저 셸 스크립트를 완성합니다. 이 셸 스크립트는 1S 출력 시간마다 파일에 기록됩니다.rm /tmp/logstash.log
set index=2
while true
do
cur_date="`date '+%Y %m %d %H %m %S'`"
echo ${cur_date} >> /tmp/logstash.log
sleep 1
done
이 스크립트는/tmp 디렉터리에 logstash를 만듭니다.log 로그 파일, 그리고 데이터를 이 파일에 기록합니다. Logstash는 이 파일을 감시하고 이 파일을 포맷해야 합니다.
시작 구성 파일 만들기
LogStash 구성은 다음과 같습니다( conf.cnf Logstash
.
rm /tmp/logstash.log
set index=2
while true
do
cur_date="`date '+%Y %m %d %H %m %S'`"
echo ${cur_date} >> /tmp/logstash.log
sleep 1
done
path
을 사용하여 모니터링 파일 디렉터리를 표시하고 일치 기호를 지원합니다. start_position
는 모니터링의 시작 위치input{
file{
path => "/tmp/logstash.log"
start_position => "end"
}
}
filter {
grok {
match => { "message" => "%{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second}"}
}
json {
source => "message"
target => "jsoncontent"
}
}
output{
elasticsearch{
hosts => ['127.0.0.1:9200']
index => 'log'
}
}
또한 위 셸 스크립트의 코드에 따라 각 시간 속성은 공백으로 구분되기 때문에 우리
grok
도 가짜 로그 상황에 따라 적합해야 한다.그래서 %{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second}
그 중에서 사칭 앞의 표시 유형.콜론 뒤에 필드 속성을 표시하고 변환하는 과정에서 키로 ElasticSearch에 저장됩니다. 물론 이런 유형은 매우 많습니다. 공식 지원의 위치는 다음과 같습니다.https://github.com/elastic/logstash 마지막 출력, 초기 디버깅은 다음과 같이 콘솔에 출력할 수 있습니다.
output{
stdout{
codec => rubydebug
}
}
출력이 정확하면 ElasticSearch에 기록합니다.
테스트
우선 콘솔 표준 출력을 사용해서 효과를 봅시다
콘솔 인쇄
수정
conf.cnf
파일의 마지막 output
속성은output{
stdout{
codec => rubydebug
}
}
Logstash 디렉터리로 전환, 입력
./bin/logstash -f ./conf.cnf
실행Sending Logstash logs to /home/tao/soft/logstash/logs which is now configured via log4j2.properties
[2018-09-26T12:45:50,585][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2018-09-26T12:45:51,080][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.4.1"}
[2018-09-26T12:45:54,236][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2018-09-26T12:45:54,739][INFO ][logstash.inputs.file ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/home/tao/soft/logstash/data/plugins/inputs/file/.sincedb_485b967e0d7e8bef0d95852573188f7a", :path=>["/tmp/logstash.log"]}
[2018-09-26T12:45:54,780][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<0x5fa716fa run="">"}
[2018-09-26T12:45:54,838][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2018-09-26T12:45:54,853][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections
[2018-09-26T12:45:55,110][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
이때 파일에 데이터가 추가되지 않았기 때문에 LogStash는 이를 감시합니다. 예를 들어 Shell을 호출하여 파일에 데이터를 쓰고 관찰 결과
, 0 ,
를 관찰합니다. 또한 이 셸 스크립트(Ctrl+C)를 닫아서 데이터에 방해가 되지 않도록 주의하십시오.[2018-09-26T12:47:55,748][WARN ][logstash.filters.json ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 55", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
at [Source: (byte[])"2018 09 26 12 09 55"; line: 1, column: 7]>}
{
"host" => "linux",
"@version" => "1",
"message" => "2018 09 26 12 09 55",
"year" => "2018",
"@timestamp" => 2018-09-26T04:47:55.646Z,
"month" => "09",
"second" => "55",
"hours" => "12",
"path" => "/tmp/logstash.log",
"minute" => "09",
"tags" => [
[0] "_jsonparsefailure"
],
"day" => "26"
}
[2018-09-26T12:47:56,762][WARN ][logstash.filters.json ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 56", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
at [Source: (byte[])"2018 09 26 12 09 56"; line: 1, column: 7]>}
{
"host" => "linux",
"@version" => "1",
"message" => "2018 09 26 12 09 56",
"year" => "2018",
"@timestamp" => 2018-09-26T04:47:56.656Z,
"month" => "09",
"second" => "56",
"hours" => "12",
"path" => "/tmp/logstash.log",
"minute" => "09",
"tags" => [
[0] "_jsonparsefailure"
],
"day" => "26"
}
데이터가 json 형식으로 변환된 것을 볼 수 있습니다. 그 중에서 year,month입니다.day와 hours는 바로 저희가 gork에서 설정한 거예요.
ElasticSearch로 가져오기
마지막 출력 수정
output{
elasticsearch{
hosts => ['127.0.0.1:9200']
index => 'log'
}
}
이 때 ElasticSearch는 9200 포트에서 시작해야 합니다. 다른 포트의 경우 수정해야 합니다.
위의 명령과 마찬가지로
./bin/logstash -f ./conf.cnf
를 실행하고 셸 스크립트를 실행합니다. 이 때 Kibana를 통해 데이터 GET /log/doc/_search
를 조회하면 ElasticSearch에 끊임없이 기록된 로그를 볼 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【c++】enum struct(class)란?c++에서 enum을 선언 할 때 다음과 같은 선언을 본 적이 있습니까? ※struct는 class도 될 수 있다 이 struct라든지 class는 무엇일까? 라고 하는 의문이 있어 조사해 보았습니다. 결론, 두 가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.