안녕하세요 오늘은
MongoDB에 로그를 쌓은 후에
해당 데이터를 집계한 후 LogStash로 MySQL에 데이터를 넣겠습니다
도커설치
https://devel-lee.tistory.com/4
LogStash 설치
docker pull logstash로 이미지를 받으신 후
docker image ls로 생성된 이미지를 확인해주세요
docker run -it --rm docker.elastic.co/logstash/logstash:7.6.2 logstash -e 'input { stdin { } } output { stdout { } }'
정상적으로 설치되었나 확인입니다. 다른 설정파일을 수정하지 않고 바로 실행이 됩니다
약 1~2분정도 실행을 기다린 뒤
텍스트가 입력되면 바로 output을 줍니다
mongodb에서 데이터 가져오기
1. logstash-input-mongodb
2. JDBC Driver를 이용한 input
3. MongoDB -> file
처음에는 1,2번 쪽으로 생각을 했으나
둘다 정식으로 지원하는 방법이 아니고 제한이 많아서 3번으로 선택했습니다
로그를 쌓다보면 부하가 걸리기 때문에 추천합니다
우선 여러가지 방법으로 file을 만들겠지만
저는 nodejs를 이용하여 짧은 코드로 파일을 만들었습니다
nodejs 설치
curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
yum -y install nodejs
node -v
npm install mongodb --save
nodejs를 설치한 후 mongoDB Client까지 설치했습니다
test.js
var mongodb = require("mongodb");
var client = mongodb.MongoClient;
var url = "mongodb://SERVERIP:27017/";
client.connect(url, function (err, client) {
var db = client.db("test");
var collection = db.collection("first");
var query = {};
var cursor = collection.find(query);
cursor.forEach(
function(doc) {
console.log(JSON.stringify(doc));
},
function(err) {
client.close();
}
);
});
우선 db에 접근하여 간단한 find로 json을 만드는 파일입니다
node /etc/nodejs/test.js > /etc/logstash/test.json
몽고의 테스트 데이터가 이렇게 생성된걸 확인하실 수 있습니다
위치는 크게 중요하지 않습니다
저는 etc아래 마음대로 생성했습니다
Logstash.conf
mkdir /etc/logstash로 폴더를 하나 만들어주세요
vi /etc/logstash/json.conf
mysql jar URL
https://dev.mysql.com/downloads/connector/j/
input {
file {
path => "/etc/logstash/test.json"
start_position => "beginning"
type => "json"
file_completed_action => "log_and_delete"
file_completed_log_path => "/etc/logstash/log/logs.log"
ignore_older => 0
}
}
filter {
json {
source => "message"
target => "data"
}
split {
field => "data"
}
mutate {
add_field => {
"name" => "%{[data][name]}"
}
}
}
output {
jdbc {
driver_jar_path => "/etc/logstash/mysql-connector-java-5.1.49.jar"
driver_class => "com.mysql.jdbc.Driver"
connection_string => "jdbc:mysql://MYSQLSERVER:3306/test?user=USER&password=PWD"
statement => [ "INSERT INTO output_table (name) VALUES(?)", "name" ]
}
stdout {
codec => "rubydebug"
}
}
vi로 편집하다보니까 공백이 좀 많습니다
json파일을 읽어서 mysql로 입력하는 conf파일입니다
docker run -it --rm -v "$PWD":/etc/logstash a logstash -f /etc/logstash/json.conf
docker를 실행시켜서 정상적으로 데이터가 들어가는지 확인해주세요
이렇게 데이터가 잘 들어간것을 확인하실 수 있습니다
'CentOS 7' 카테고리의 다른 글
셀리눅스(selinux) 권한 설정하기 (0) | 2020.09.25 |
---|
댓글