일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spring
- vue
- Kafka
- 머신러닝
- login
- Docker
- fastcampus
- config
- 로그인
- 설정
- EMR
- java
- 자동
- 자바
- hive
- aws
- 젠킨스
- Cluster
- 예제
- Mac
- Zeppelin
- 간단
- Jenkins
- 클러스터
- SpringBoot
- gradle
- Redis
- ec2
- 레디스
- redash
- Today
- Total
코알못
[로그 수집] 파이프 라인을 만들어 보자! 본문
로그를 저장소인 S3에 저장하여 EMR 에서 활용할 것이다.
이를 위해서 로그를 아래 아키텍쳐와 같이 구성하는 실습을 진행해본다!
모두 버전은 7.6.0로 맞추었으며, mac 관련 설치 파일을 이용하였으니 맞는 os로 설치 해야 한다.
=================== java ===================
logstash 의 경우 실행시 java 설치 필요하다는 오류 발생
could not find java; set JAVA_HOME or ensure java is in PATH
// 설치 가능한 버전 확인
$ yum list *java*jdk*
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
java-1.7.0-openjdk.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-accessibility.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-demo.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-devel.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-headless.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-javadoc.noarch 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.7.0-openjdk-src.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.2 amzn2-core
java-1.8.0-openjdk.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-accessibility.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-accessibility-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-demo.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-demo-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-devel-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-headless-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-javadoc.noarch 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-javadoc-debug.noarch 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-javadoc-zip.noarch 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-javadoc-zip-debug.noarch 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-src.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
java-1.8.0-openjdk-src-debug.x86_64 1:1.8.0.312.b07-1.amzn2.0.2 amzn2-core
// 설치
$ sudo yum install java-1.8.0-openjdk.x86_64
Complete!
// 확인
$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
=================== logstash ===================
- 다운
- 사이트 : https://www.elastic.co/kr/downloads/past-releases#logstash
$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.0.tar.gz
$ tar -xvf logstash-7.6.0.tar.gz
$ cd logstash-7.6.0
- 실행
$ bin/logstash -e '
> input { stdin {} }
> output { stdout {} }'
bye
{
"host" => "ktm-c387.intra.musiccity.co.kr",
"message" => "bye",
"@timestamp" => 2022-02-10T03:18:31.265Z,
"@version" => "1"
}
hohoho
{
"host" => "ktm-c387.intra.musiccity.co.kr",
"message" => "hohoho",
"@timestamp" => 2022-02-10T03:18:43.333Z,
"@version" => "1"
}
- 설정 파일 생성후 실행
vi conf/logstash.conf
input{
stdin{}
}
output{
stdout{}
}
$ bin/logstash -f config/logstash.conf
test
/Users/hongyoolee/document/10.es/logstash/logstash-7.6.0/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
"@version" => "1",
"host" => "ktm-c387.intra.musiccity.co.kr",
"@timestamp" => 2022-02-10T04:46:13.480Z,
"message" => "test"
}
hihi
{
"@version" => "1",
"host" => "ktm-c387.intra.musiccity.co.kr",
"@timestamp" => 2022-02-10T04:46:16.171Z,
"message" => "hihi"
}
- 설정 파일 수정후 실행
vi conf/logstash.conf
input {
beats {
port => 5044
host => "0.0.0.0"
}
}
output {
stdout{
codec => dots
}
elasticsearch{
hosts => "0.0.0.0"
index => "servicelog-%{+yyyy.MM.dd}"
}
}
// 실행
bin/logstash -f config/logstash.conf
// 로그
[2022-02-12T00:37:34,883][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
.....
// 키바나
- 설정 파일 수정후 실행
vi conf/logstash.conf
input {
beats {
port => 5044
host => "0.0.0.0"
}
}
output {
stdout{
codec => dots
}
elasticsearch{
hosts => "0.0.0.0"
index => "servicelog-%{+yyyy.MM.dd}"
}
kafka {
bootstrap_servers => "kafka-01:9092,kafka-02:9092,kafka-03:9092"
codec => json
topic_id => "logstash-test"
}
}
// logstash console 로그
[2022-02-13T01:30:08,063][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
.....
// elastic search 데이터 확인 (kibana)
// kafka 확인 (s3에 데이터 저장됐는지 확인)
// 실시간으로 데이터 추가
$ echo "{'name':'test'}" >> service.log
=================== elastic search ===================
- 다운로드 사이트 : https://www.elastic.co/kr/downloads/past-releases#elasticsearch
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-darwin-x86_64.tar.gz
$ tar -xvf elasticsearch-7.6.0-darwin-x86_64.tar.gz
$ cd elasticsearch-7.6.0-darwin-x86_64
- 실행
$ bin/elasticsearch
=================== kibana ===================
- 다운 사이트 : https://www.elastic.co/kr/downloads/past-releases#kibana
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.0-darwin-x86_64.tar.gz
$ tar -xvf kibana-7.6.0-darwin-x86_64.tar.gz
$ cd kibana-7.6.0-darwin-x86_64
- 실행
$ bin/kibana
- UI
http://localhost:5601
=================== filebeat ===================
- 현재 버전 : filebeat-7.6.0
- 사이트 : https://www.elastic.co/kr/downloads/past-releases#filebeat
- 다운
$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-darwin-x86_64.tar.gz
$ tar -xvf filebeat-7.6.0-darwin-x86_64.tar.gz
$ cd filebeat-7.6.0-darwin-x86_64
- 실행
$ ./filebeat
=================== kafka ===================
- kafka 셋팅은 아래 참고
2022.01.17 - [BIG DATA] - [AWS] EC2를 이용한 KAFKA 클러스터 구축
2022.01.17 - [BIG DATA] - [AWS] EC2를 이용한 KAFKA Connect 구축
// 셋팅 변경
- 오류 : If you are trying to deserialize plain JSON data, set schemas.enable=false in your converter configuration
- 해결 : connect 설정 (worker.properties) 변경
value.converter.schemas.enable=false
// 파일 생성 (testdata.json)
{"name":"ddong"}
{"name":"fofo"}
// topic 생성 및 위 파일 쓰기
# producer
/home/ec2-user/kafka_2.12-3.0.0/bin/kafka-console-producer.sh --topic logstash-test --bootstrap-server kafka-01:9092,kafka-02:9092,kafka-03:9092 < testdata.json
// 명령어
# kafka topic check
/home/ec2-user/kafka_2.12-3.0.0/bin/kafka-topics.sh --list --bootstrap-server kafka-01:9092,kafka-02:9092,kafka-03:9092
# consumer
/home/ec2-user/kafka_2.12-3.0.0/bin/kafka-console-consumer.sh --topic logstash-test --from-beginning --bootstrap-server kafka-01:9092,kafka-02:9092,kafka-03:9092
# delete topic
/home/ec2-user/kafka_2.12-3.0.0/bin/kafka-topics.sh --bootstrap-server kafka-01:9092,kafka-02:9092,kafka-03:9092 --delete --topic logstash-test
// 토픽을 읽어 s3에 전달된 데이터 저장
- API : http://kafka-01:8083/connectors
- request data :
{
"name": "logstash-test",
"config": {
"connector.class": "io.confluent.connect.s3.S3SinkConnector",
"format.class": "io.confluent.connect.s3.format.json.JsonFormat",
"storage.class": "io.confluent.connect.s3.storage.S3Storage",
"topics.regex" : "logstash-test",
"flush.size": 1,
"s3.bucket.name": "emr-hong",
"s3.region": "ap-northeast-2",
"topics.dir": "data/topics",
"locale": "ko_KR",
"timezone": "Asia/Seoul"
}
}
// 오류 확인
- API : http://kafka-01:8083/connectors/logstash-test/status
- response
{
"name": "logstash-test",
"connector": {
"state": "RUNNING",
"worker_id": "172.31.50.142:8083"
},
"tasks": [
{
"id": 0,
"state": "RUNNING",
"worker_id": "172.31.50.142:8083"
}
],
"type": "sink"
}
// s3 데이터 확인
데이터 하나 읽어보면 정상적으로 넘어왔다.
<참고>
1. logstash, filebeat 의 data 경로를 지워야 처음 부터 데이터 전송을 한다.
2. elastic search 실행시 아래와 같은 오류 발생
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release
- 해결 : es 의 jvm 메모리 설정을 기존보다 작게 변경 (컴퓨터 사양에 맞게 설정)
vi conf/jvm.options
-Xms108m
-Xmx108m
3. kibana, elastic search 외부에서 접근이 안될시
- 해결 : 방화벽 확인(kibana 서버 inbound port 가 source ip에 대해 허용 되어 있는지 확인) or kibane config 수정
// kibana config
- server.host 를 0.0.0.0 으로 수정
$ vi config/kibana.yml
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "0.0.0.0"
// elastic search config
- network.host 를 0.0.0.0 으로 수정
vi config/elasticsearch.yml
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200
4. elastic search error
// error
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
//해결
$ sudo vi /etc/sysctl.conf
vm.max_map_count = 262144
:wq!
//error
the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
// 해결
$ vi config/elasticsearch.yml
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
'BIG DATA' 카테고리의 다른 글
elastic search 명령어 (0) | 2022.02.20 |
---|---|
[로그 수집] logstash 장애시 이슈 없을까? (0) | 2022.02.14 |
[AWS] EMR(hadoop) - Glue 메타 스토어 (HIVE, SPARK) (0) | 2022.02.01 |
[AWS] EMR(hadoop) - 오토 스케일링 해보자! (0) | 2022.01.31 |
[AWS] EMR(hadoop) - 자동 종료 해보자! (0) | 2022.01.30 |