본문 바로가기
동굴 속 정보

리눅스 ELK 서비스 등록

by 도시형닌자 2021. 5. 9.

[ 리눅스 서비스 ]

리눅스는 systemd로 서비스를 사용한다. systemctl는 systemd(System Deamon)을 관리하는 도구이다. 그래서 systemctl을 사용해서 서비스를 등록해서 사용하면 된다. 서비스라고 하면 끊임없는 동작해야 한다. 그래서 리눅스는 systemd로 등록된 서비스들은 전사했을 때 다시 살아나는 기적을 보여준다.

 

systemctl은 레드햇(Red Hat)의 Lennart Poettering 이 개발 했지만 현재는 Linux 공식 도구로 자리매김했다. target을 통해서 모드를 정하고 모드를 통해 기능을 제한한다. multi-user.target이 기본이고 일반적인 쉘스크립트(텍스트) 모드를 제공한다. 그리고 graphical.target 을 사용하면 GUI를 제공하는 모드를 제공한다. 기타 여러개가 더 있지만 위 뒤개 이외에는 거의 사용안한다.

# default target 출력
systemctl get-default

# default 타겟 변경
systemctl set-default graphical.target

# 활성 target 출력
systemctl list-units --type target

# 현재 타겟 변경
systemctl isolate multi-user.target

 

 

 

[ Logstash 서비스 추가 ]

Logstash는 Filebeat가 보내주는 데이터를 받아서 전처리를 진행한 후 컬럼별로 데이터를 구성한다. 그러다 보니 입력값이 많으면 빈번하게 전사하게 된다. 전사했으면 다시 깨어나야 하므로 서비스를 추가해주는 것이 좋다. enable로 서비스를 활성화시키고 deamon-reload해서 상태값을 최신화시켜준다.

# 서비스 활성화
systemctl enable logstash.service

# 서비스 리로드
systemctl daemon-reload

 

하지만 이렇게 서비스를 등록하면 Logstash에 적용한 설정들이 입력되지 않으므로 아래와 같이 서비스 구동 방식을 수정해서 적용하는 것이 좋다. 서비스를 등록하면 "/etc/systemd/system/" 경로에 서비스 파일이 생성된다. 해당 파일을 열어서 수정하면 된다.

vi /etc/systemd/system/logstash.service

 

내용을 보면 알겠지만 Environment 부분을 통해서 설정값을 넣는 것이 중요하다. 그래서 설정을 바탕으로 Logstash가 움직일 수 있게 되는 것이다. 아래와 같이 구성하면 서비스는 문제없이 동작하게 될 것이다.

[Unit]
Description=logstash

[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
Environment="LOGSTASH_CONFIG_OPTS=-f /usr/share/logstash/bin/first-pipeline.conf"
ExecStart=/usr/share/logstash/bin/logstash $LOGSTASH_CONFIG_OPTS "--path.settings" "/etc/logstash"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384

# When stopping, how long to wait before giving up and sending SIGKILL?
# Keep in mind that SIGKILL on a process can cause data loss.
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

 

 

[ Filebeat 서비스 추가 ]

Logstash와 마찬가지로 filebeat도 서비스를 먼전 활성화 시킨다. 그 후 deamon-reload를 통해서 서비스를 최신화 시켜준다.

# 서비스 활성화
systemctl enable filebeat.service

# 서비스 리로드
systemctl daemon-reload

 

활성화된 서비스를 "/etc/systemd/system/" 에서 찾아서 수정을 진행한다.

vi /usr/lib/systemd/system/filebeat.service

 

logstash에서는 Environment를 통해서 값을 넣었지만 ExecStart에 바로 설정값을 넣어서 실행해도 된다.

[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/share/filebeat/bin/filebeat -e -c /etc/filebeat/filebeat.yml
Restart=always

[Install]
WantedBy=multi-user.target