[ Graylog - 로그수집서버 설치 ] part 1

안녕하세요. 여러대의 서버들에 하나하나 접속해서 log를 확인하기 힘들고 귀찮기때문에 graylog를 이용해 로그 수집서버를 구성해서 받아 볼 생각입니다.

 

 

Graylog란,

MongoDB와 Elasticsearch 기반으로 동작하며 로깅 수집과 분석을 타겟으로 제공하는 오픈소스 솔루션입니다. 리눅스 기반 설치가 가능하며, 로그가 많은 경우 시스템의 메모리 및 Disk IO를 적절히 지원한다면 매우 유용합니다.

 

 

Graylog 장점

  • 설치가 쉽고 빠르며 오픈소스 기반이다.
  • 얼롯팅 가능, 대쉬보드를 통해그래프 기능 지원

 

Graylog 단점

  • 그래프 기능이 약간 부족하다..
  • 플러그인 부재

 

 

graylog 아키텍쳐

graylog 아키텍처

-MongoDB = 구성정보, 메타정보 저장용으로 사용되는 DB

 

-Elasticsearch = Log 원격지에서 받은 로그 메세지를 저장하고 필요할 때 마다 검색할 수 있는 기능 제공, 용량이 많아지고 데이터 인덱싱을 위한 부하가 발생할경우 고용량 메모리 및 High IOPS를 제공하는 저장 공간을 권고

 

-Graylog Server = 다양한 Input에서 발생하는 로그를 구문 분석하며, 해당 로그들을 처리할 수 있는 웹 인터페이스를 제공하는 서버

 

 

 

 

 테스트 환경

hostname
IP
version
db version
jh-node001
115.85.182.24
centos7.8
mysql5.7
jh-node002
49.50.164.159
centos7.8
mysql5.7
graylog server
118.67.132.167
centos7.8
 

 

 

 

 

 사전 작업  (graylog server)

 

■ graylog설치에 필요한 패키지 설치

[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum -y install wget pwgen

Elasticsearch 사용을 위한 Java설치

[root@localhost ~]# yum -y install java-1.8.0-openjdk-headless

 

 

 

 Elasticsearch 설치 (graylog server)

 

■ GPG Signing Key 설치

[root@localhost ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
 

 

 Repository에 Elasticsearch repo 등록

[root@localhost ~]# touch /etc/yum.repos.d/elasticsearc-6.repo
bash -c 'echo "[elasticsearch-6.x]" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "name=Elasticsearch repository for 6.x packages" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "baseurl=https://artifacts.elastic.co/packages/6.x/yum" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "gpgcheck=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "enabled=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "autorefresh=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
bash -c 'echo "type=rpm-md" >> /etc/yum.repos.d/elasticsearc-6.repo'
 

 

Yum설치

[root@localhost ~]# yum -y install elasticsearch
 
 

■ Daemon 활성화

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable elasticsearch.service
 
 
 
 

 Cluster name 등록 및 재구동 (cluster name 임의지정)

주석해제 후 cluster.name 입력
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog-jh

[root@localhost ~]# systemctl restart elasticsearch.service
 
 
 
 
 

 9200포트로 정상작동 및 Cluster name 변경 확인

[root@localhost ~]# curl -X GET http://localhost:9200
{
  "name" : "385c3IO",
  "cluster_name" : "graylog-jh",
  "cluster_uuid" : "oN0A9uP7RG6ElvD6ClDORA",
  "version" : {
    "number" : "6.8.22",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "71fcb50",
    "build_date" : "2021-12-19T01:10:56.497443Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}



## Elasticsearch Cluster 이상 유무 확인
[root@localhost ~]# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
  "cluster_name" : "graylog-jh",
  "status" : "green",                                         //해당 status가 green으로 나와야 정상작동
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "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
}


 
 
 

 

 MongoDB 설치 ( graylog server)

## Repository 추가
[root@localhost ~]# vi /etc/yum.repos.d/mongodb-org-4.4.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc



## mongo db 설치
[root@localhost ~]# yum -y install mongodb-org
 
[root@localhost ~]# systemctl start mongod.service
 
 
 
 

 Graylog 설치 ( graylog server)

## Repository 다운
[root@localhost ~]# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-3.0-repository_latest.rpm
https://packages.graylog2.org/repo/packages/graylog-3.0-repository_latest.rpm(을)를 복구합니다
준비 중...                         ################################# [100%]
Updating / installing...
   1:graylog-3.0-repository-1-6       ################################# [100%]


## graylog server 설치
[root@localhost ~]# yum -y install graylog-server

 

 

 

 

 graylog 환경 변수 설정

 

■ password_ secret 수정

pwgen util을 통해 암호 생성, server.conf에 패스워드 정보 입력

[root@localhost ~]# pwgen -N 1 -s 96
DTfgqCVQs1Zjjl5VrLeJkztLGRYbETmuTbTnQwkHqWht7UJvHjHEuThqe2KWlY4rJHpy3Yz0Fpac7aL6vpyZORetifUHh933
 
 
 

 해당 파일 password_secret값 입력

[root@localhost ~]# vi /etc/graylog/server/server.conf
# Generate one by using for example: pwgen -N 1 -s 96
password_secret = DTfgqCVQs1Zjjl5VrLeJkztLGRYbETmuTbTnQwkHqWht7UJvHjHEuThqe2KWlY4rJHpy3Yz0Fpac7aL6vpyZORetifUHh933
 
 

 graylog server admin에 대한 암호 생성 ( graylog server)

해당 암호 통해 웹에 로그인하며, 기본 User ID는 admin입니다.
[root@localhost ~]# echo -n admin | sha256sum
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918  


[root@localhost ~]# vi /etc/graylog/server/server.conf
# and put the resulting hash value into the following line
root_password_sha2 = 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
 
 
 
 
 
 

 추가 환경설정 수정 ( graylog server)

이부분은 일반 vm과 cloud 환경 두가지로 나눠서 정리했습니다.
본인한테 맞는 환경에 따라 진행 해주시면 됩니다.
 vm에서 하실땐 http_bind_address에 public ip를 입력하나, cloud 환경에선 public ip가 cloud플래폼 내부ip(10.x.x.x)대역으로 매핑되어 127.0.0.1을 넣어 로컬로 받아와야한다..
 
 

<일반 VM>


[root@localhost ~]# vi /etc/graylog/server/server.conf
root/timezone = Asia/Seoul
elasticsearch_shards = 1                      // 샤드 설정. default는 4이나,클러스터 노드 1개만 있으면 1로 수정.
http_bind_address = 10.70.101.84:9000     //graylog 인터페이스 IP:port 변경

 

 

 

<Cloud 환경>


 ※ curl로는 받아오나 막상 ip로 web에 접속하였을때 인터페이스를 못받아오는 상황

해당 config에 써놓은 ip가 ifconfig에 나오는 public ip여야합니다!  graylog가 해당 ip를 찾다가 못찾으면 stop됩니다..따라서 제 테스트 환경은 public ip는 118.67.132.x 이나 ifconfig에는 네이버클라우드 내부대역으로 매핑이 되어 앞단에 proxy서버를 둬야합니다..
[root@jh-test ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.41.227.47  netmask 255.255.254.0  broadcast 10.41.227.255    //이게 public ip가 매핑된 10점대역 네이버클라우드 ip입니다
        ether f2:20:cd:b4:20:e9  txqueuelen 1000  (Ethernet)
        RX packets 109317  bytes 443622377 (423.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 44991  bytes 6142309 (5.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 21626  bytes 8848708 (8.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21626  bytes 8848708 (8.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




proxy로 아파치 설치
[root@jh-test ~]# yum -y install httpd

아파치 config 수정 (virtual 란에 아래 빨간색 config 삽입)
[root@jh-test ~]# vi /etc/httpd/conf/httpd.conf

# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
<VirtualHost *:80>
    ServerName graylog.com         => servername은 도메인을 넣었는데 public ip를 넣어도 됩니다. 저는 /etc/hosts에 넣은 alias 넣은겁니다.
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        RequestHeader set X-Graylog-Server-URL "http://118.67.132.167/"        => public ip 기입       
        ProxyPass http://127.0.0.1:9000/                                                      =>127.0.0.1 로컬 기입
        ProxyPassReverse http://127.0.0.1:9000/                                            =>127.0.0.1 로컬 기입
    </Location>

</VirtualHost>




## 아파치 시작
[root@jh-test ~]# systemctl start httpd.service

 


 

-----여기부턴 동일------

 

 

■ graylog 재기동 & 실행 확인 ( graylog server)

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart graylog-server.service



## 실행 확인
[root@localhost ~]#  tail -200f /var/log/graylog-server/server.log | grep Graylog
2022-01-12T17:46:34.806+09:00 INFO  [ServerBootstrap] Graylog server 3.0.2+1686930 starting up
2022-01-12T17:47:35.615+09:00 INFO  [ServerBootstrap] Graylog server up and running.
 

 

 9000 port 개방 ( graylog server)

[root@localhost ~]# firewall-cmd --permanent --add-port=9000/tcp
success

[root@localhost ~]# firewall-cmd --reload
success

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: ssh dhcpv6-client
  ports: 9000/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 

 

 

 graylog 인터페이스

 

http://<graylog-server ip입력>:9000    접속               

※ cloud환경에서는 아파치로 붙기때문에 80 포트로 접속 (ex http://118.67.132.167)

username : admin
password : admin

첫 접속화면

 

 

여기까지 설치를 완료 하였습니다. 다음 글에선 syslog수집하는 설정을 하도록 하겠습니다.

 

 

 

참고

 

https://youngmind.tistory.com/entry/Graylog-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%84%B1-1%ED%8E%B8-%EC%84%A4%EC%B9%98?category=783968

 

Graylog 서버 구성 1편 - 설치

1. Gray Log 소개와 주요 구성요소 Graylog는 MongoDB와 Elasticsearch를 기반으로 동작하며 사실상 로깅 수집과 분석을 타겟으로 제공되는 오픈소스기반이다. 설치가 간단하면서 다양한 인덱싱과 필터링

youngmind.tistory.com