ELK 로그 분석 플랫폼 구축 (상) - ELK 소개 및 Elasticsearch 분포식 집단 구축
요구 사항:
일반적으로 우리는 로그 분석 장면을 진행해야 한다. 로그 파일에서grep,awk를 직접 사용하면 자신이 원하는 정보를 얻을 수 있다.그러나 규모가 크고 로그 양이 많으며 복잡한 장면에서 이 방법은 효율이 낮고 로그 양이 너무 많으면 어떻게 압축하고 텍스트 검색이 너무 느리면 어떻게 하는지, 어떻게 다차원적으로 조회하는지 문제에 직면한다.모든 서버의 로그 수집을 위한 집중화된 로그 관리가 필요합니다.흔히 볼 수 있는 해결 방향은 집중식 로그 수집 시스템을 구축하여 모든 노드의 로그를 통일적으로 수집하고 관리하며 방문하는 것이다.
대형 시스템은 일반적으로 분포식 배치의 구조로 서로 다른 서비스 모듈이 서로 다른 서버에 배치된다. 문제가 발생할 때 대부분의 상황은 문제가 노출된 관건적인 정보에 따라 구체적인 서버와 서비스 모듈로 포지셔닝하고 집중식 일지 시스템을 구축하면 포지셔닝 문제의 효율을 높일 수 있다.
다음과 같은 주요 특징을 포함하는 완벽한 중앙 집중식 로그 시스템
ELK 소개:
ELK는 세 개의 소스 오픈 소프트웨어의 줄임말로, 각각 Elasticsearch,Logstash,Kibana이다. 모두 소스 오픈 소프트웨어이다.그러나 현재 비트가 추가되었습니다. 비트는 경량급 로그 수집 처리 도구(Agent)로 비트가 차지하는 자원이 적기 때문에 각 서버에서 로그를 수집한 후 Logstash에 전송하기에 적합합니다. 정부에서도 이 도구를 추천합니다. 현재 원래의 ELK Stack 구성원에 비트 도구가 추가되어 Elastic Stack으로 이름이 바뀌었습니다.
Elastic Stack에는 다음이 포함됩니다.
https://www.elastic.co/cn/
중국어 자습서:
https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
ELK 스키마:
ELK 설치 준비
분산 클러스터 실험을 완료할 수 있도록 3대의 시스템을 준비합니다. 물론 더 많은 시스템을 사용할 수 있습니다.
역할 구분:
ELK 버전 정보:
세 시스템을 구성하는 hosts 파일의 내용은 다음과 같습니다.
$ vim /etc/hosts
192.168.77.128 master-node
192.168.77.130 data-node1
192.168.77.134 data-node2
그리고 세 대의 기계는 모두 방화벽을 닫거나 방화벽 규칙을 비워야 한다.
설치
먼저 공식적인 설치 설명서:
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
나도 이곳에서 정부에서 제공한 원본을 통해 설치를 진행하는데 다음과 같은 조작은 3대의 기계에서 모두 실행해야 한다. 왜냐하면 3대의 기계는 모두 es를 설치해야 하기 때문이다.
[root@master-node ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@master-node ~]# vim /etc/yum.repos.d/elastic.repo #
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@master-node ~]# yum install -y elasticsearch
공식 소스 다운로드가 너무 느리면 rpm 패키지를 직접 다운로드하여 설치할 수도 있습니다.
[root@master-node ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
[root@master-node ~]# rpm -ivh elasticsearch-6.0.0.rpm
설정 es
elasticsearch 프로필은
[root@master-node ~]# ll /etc/elasticsearch
16
-rw-rw---- 1 root elasticsearch 2869 2 17 03:03 elasticsearch.yml
-rw-rw---- 1 root elasticsearch 2809 2 17 03:03 jvm.options
-rw-rw---- 1 root elasticsearch 5091 2 17 03:03 log4j2.properties
[root@local ~]# ll /etc/sysconfig/elasticsearch
-rw-rw---- 1 root elasticsearch 1613 2 17 03:03 /etc/sysconfig/elasticsearch
[root@master-node ~]#
elasticsearch.yml
파일은 집단 노드 등 관련 정보를 설정하는 데 사용되고elasticsearch
파일은 서비스 자체와 관련된 설정이다. 예를 들어 어떤 설정 파일의 경로와java의 일부 경로 설정 등이다.공식 구성 문서:
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html
클러스터 노드 구성을 시작하고 192.168.77.128에서 구성 파일을 편집합니다.
[root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml #
cluster.name: master-node #
node.name: master #
node.master: true #
node.data: false #
network.host: 0.0.0.0 # ip, ip
http.port: 9200 # es
discovery.zen.ping.unicast.hosts: ["192.168.77.128", "192.168.77.130", "192.168.77.134"] #
[root@master-node ~]#
그런 다음 구성 파일을 다른 두 시스템으로 보냅니다.
[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/
[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node2:/tmp/
두 대의 기계에 가서 이 파일을 변경하고 다음과 같은 몇 군데를 수정한다.
192.168.77.130:
[root@data-node1 ~]# vim /tmp/elasticsearch.yml
node.name: data-node1
node.master: false
node.data: true
[root@data-node1 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node1 ~]#
192.168.77.134:
[root@data-node2 ~]# vim /tmp/elasticsearch.yml
node.name: data-node2
node.master: false
node.data: true
[root@data-node2 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node2 ~]#
위의 구성이 완료되면 마스터 노드에서 es 서비스를 시작합니다.
systemctl start elasticsearch.service
주 노드의 시작이 완료된 후에 다른 노드의es 서비스를 시작합니다.
오류 기록:
내가 여기에서 메인 노드를 시작할 때 시작에 성공하지 못해서es의 로그를 보았지만 생성되지 않았다. 그러면 시스템 로그를 볼 수밖에 없다.
[root@master-node ~]# ls /var/log/elasticsearch/
[root@master-node ~]# tail -n50 /var/log/messages
오류 로그는 다음과 같습니다.
그림에서 보듯이 JDK의 경로가 잘못 설정되어 PATH에서 해당하는 디렉터리를 찾을 수 없습니다.
그래서 JAVA를 보면...HOME 환경 변수의 값은 다음 위치를 가리킵니다.
[root@master-node ~]# echo $JAVA_HOME
/usr/local/jdk1.8/
[root@master-node ~]# ls /usr/local/jdk1.8/
bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
[root@master-node ~]#
가리키는 경로가 틀리지 않은 것을 발견하면 프로필에 export를 쓰는 것을 잊어버렸을 수도 있습니다. 그래서 프로필의 끝에 이 문장을 추가했습니다.
export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH
source 명령을 사용하여 프로필을 다시 불러온 후에es서비스를 다시 시작했지만 시작하지 못했습니다. 그래서 오류 로그를 무시했습니다.
이것은 환경 변수에서 자바 실행 가능한 파일을 찾을 수 없습니다. 그러면 쉽습니다. 소프트 링크를 만들면 됩니다.
[root@master-node ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/
es서비스를 다시 시작하여 이번에 드디어 시작에 성공했습니다.
[root@master-node ~]# systemctl restart elasticsearch.service
[root@master-node ~]# ps aux |grep elasticsearch
elastic+ 2655 9.4 31.8 3621592 1231396 ? Ssl 15:42 0:14 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.4M9NarAc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
root 2735 0.0 0.0 112660 968 pts/0 S+ 15:44 0:00 grep --color=auto elasticsearch
[root@master-node ~]# netstat -lntp |grep java # es
tcp6 0 0 :::9200 :::* LISTEN 2655/java
tcp6 0 0 :::9300 :::* LISTEN 2655/java
[root@master-node ~]#
9300 포트는 집단 통신용이고 9200은 데이터 전송용이다.
주 노드가 가동된 후에 순서대로 다른 노드를 가동하면 됩니다. 제가 있는 이곳의 다른 노드는 모두 정상적으로 가동됩니다.
curles군집 상황 보기
클러스터 상태 점검:
[root@master-node ~]# curl '192.168.77.128:9200/_cluster/health?pretty'
{
"cluster_name" : "master-node",
"status" : "green", # green , yellow red
"timed_out" : false, #
"number_of_nodes" : 3, #
"number_of_data_nodes" : 2, # data
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
[root@master-node ~]#
클러스터 세부 정보를 보려면 다음과 같이 하십시오.
[root@master-node ~]# curl '192.168.77.128:9200/_cluster/state?pretty'
{
"cluster_name" : "master-node",
"compressed_size_in_bytes" : 354,
"version" : 4,
"state_uuid" : "QkECzZHVQJOXB7K_9CgXYQ",
"master_node" : "SGez5oKUTa2eIijLp8MsLQ",
"blocks" : { },
"nodes" : {
"4sJURH6cTsykgLberJ6pVw" : {
"name" : "data-node1",
"ephemeral_id" : "t16_uw92T5ajJqp2HWodrg",
"transport_address" : "192.168.56.128:9300",
"attributes" : { }
},
"SGez5oKUTa2eIijLp8MsLQ" : {
"name" : "master",
"ephemeral_id" : "eJZX20tpSNyJCHgBIC4x4Q",
"transport_address" : "192.168.77.128:9300",
"attributes" : { }
},
"nZ4L5-KwSdirnluhJTGn7Q" : {
"name" : "data-node2",
"ephemeral_id" : "pQENcoUcRY6fTs7SamX2KQ",
"transport_address" : "192.168.77.134:9300",
"attributes" : { }
}
},
"metadata" : {
"cluster_uuid" : "jZPv-awrQDe163Nu3y2hHw",
"templates" : { },
"indices" : { },
"index-graveyard" : {
"tombstones" : [ ]
}
},
"routing_table" : {
"indices" : { }
},
"routing_nodes" : {
"unassigned" : [ ],
"nodes" : {
"nZ4L5-KwSdirnluhJTGn7Q" : [ ],
"4sJURH6cTsykgLberJ6pVw" : [ ]
}
},
"restore" : {
"snapshots" : [ ]
},
"snapshot_deletions" : {
"snapshot_deletions" : [ ]
},
"snapshots" : {
"snapshots" : [ ]
}
}
[root@master-node ~]#
검사에 문제가 없는 후에 우리의es집단은 완성되었다. 매우 간단하다.
이 클러스터의 상태 정보는 브라우저를 통해서도 볼 수 있습니다.
그러나 나타난 것도 문자열이다. 우리는 이 정보가 도형화된 방식으로 나타나기를 바란다. 그러면 키바나를 설치해서 이 데이터를 보여줘야 한다.
curl 명령을 사용하여 elasticsearch를 조작하는 내용은 다음과 같습니다.
http://zhaoyanblog.com/archives/732.html
다음 편: ELK 로그 분석 플랫폼 구축(하)-키바나와logstash 서버 구축
전재 대상:https://blog.51cto.com/zero01/2079879
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.