티스토리 뷰

SW 개발/CentOS

CentOS 7, Graylog 3 Server 설치하기

지단로보트 2019. 8. 11. 01:21

개요

  • CentOS 7에서 Graylog 3 Server를 설치하는 방법을 소개한다.

사전조건

  • Grarylog 3 Server를 설치할 각 노드에 MongoDB가 먼저 설치되어야 한다. 설치 방법은 이 글을 참고한다. (MongoDBGraylog의 모든 환경설정을 저장하는 데이터베이스로 사용된다.)
  • Grarylog 3 Server 설치 전 별개의 노드에 Elasticsearch 6가 설치되어야 한다. 설치 방법은 이 글을 참고한다. (ElasticsearchGraylog로 전송되는 모든 로그의 저장소로 사용된다.)

Graylog 3 Server 설치

  • 아래는 CentOS 7Graylog 3 Server를 설치하는 방법이다.
### 운영체제 업데이트
$ sudo yum -y update

### Zulu OpenJDK 8 설치
$ sudo rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems
$ sudo curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo
$ sudo yum -y install zulu-8
$ sudo bash -c 'echo "export JAVA_HOME=/usr/lib/jvm/zulu-8" >> /etc/environment'
$ sudo bash -c 'echo "export JRE_HOME=/usr/lib/jvm/zulu-8/jre" >> /etc/environment'

### Graylog 3 설치
$ sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-3.1-repository_latest.rpm
$ sudo yum -y install graylog-server

### Graylog 3 비밀번호 해시 생성
$ sudo pwgen -N 1 -s 96
9Dz0g8s6YvGkZHdfm1YHVNX7RfEjyJGdawXHwpFIAaGM802dPpJouksI06t2A8Pj2QIDIMXLK01qkbAmgXPdmoI7bzlZr2Lk

$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: admin
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

### Graylog 3 설정
$ sudo vi /etc/graylog/server/server.conf
password_secret = 9Dz0g8s6YvGkZHdfm1YHVNX7RfEjyJGdawXHwpFIAaGM802dPpJouksI06t2A8Pj2QIDIMXLK01qkbAmgXPdmoI7bzlZr2Lk
root_password_sha2 = 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
root_email = "jsonobject@gmail.com"
root_timezone = Asia/Seoul
is_master = true
# 외부에서 HTTP 인터페이스로 접속이 가능하게 하려면 0.0.0.0:9000 으로 설정, 보안상 비추천
# 운영 환경에서는 로드 밸런서와 연결된 사설 IP 주소를 입력할 것
http_bind_address = 0.0.0.0:9000
# Graylog 내부 인스턴스 간 통신에 사용되는 현재 인스턴스의 URI, 사설 IP 주소 사용을 권장
http_publish_uri = http://{사설 IP}:9000/
# Graylog 외부에서 호출할 현재 인스턴스의 URI, 공인 IP 주소 사용을 권장
http_external_uri = http://{공인 IP}:9000/
elasticsearch_max_docs_per_index = 20000000
elasticsearch_max_number_of_indices = 20
elasticsearch_shards = 1
elasticsearch_replicas = 0

### Graylog 3 방화벽 개방
$ sudo firewall-cmd --permanent --add-port=9000/tcp
$ sudo firewall-cmd --reload

### Graylog 3 Server 실행
$ sudo systemctl daemon-reload
$ sudo systemctl enable graylog-server.service
$ sudo systemctl start graylog-server.service
$ sudo tail -f /var/log/graylog-server/server.log
2019-08-10T15:58:52.676Z INFO  [ServerBootstrap] Graylog server up and running.
  • http_publish_uri, http_external_uri을 옵션을 올바르게 설정하지 않으면 아래와 같은 오류가 발생할 수 있다.
2019-10-03T23:23:02.363+09:00 WARN  [ProxiedResource] Unable to call http://117.52.74.73:9000/api/system/jobs on node &lt;dc1e9946-0307-45af-9a98-eb0ebec6d66f&gt;: connect timed out

Graylog 3 Server 실행 확인

$ curl -X GET http://127.0.0.1:9000
HTTP/1.1 200 OK
X-UA-Compatible: IE=edge
X-Graylog-Node-ID: 327adb40-6e1f-48df-909f-8bcd35210324
Content-Type: text/html
Date: Sat, 10 Aug 2019 16:06:20 GMT
Content-Length: 1314
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="robots" content="noindex, nofollow">
    <meta charset="UTF-8">
    <title>Graylog Web Interface</title>
    <link rel="shortcut icon" href="http://127.0.0.1:9000/assets/favicon.png">
  </head>
  <body>
    <script src="http://127.0.0.1:9000/config.js"></script>
    <script src="http://127.0.0.1:9000/assets/vendor.4024e2a8db732781a971.js"></script>
    <script src="http://127.0.0.1:9000/assets/polyfill.a5e2fb591e8fd54ee4ef.js"></script>
    <script src="http://127.0.0.1:9000/assets/builtins.a5e2fb591e8fd54ee4ef.js"></script>
    <script src="http://127.0.0.1:9000/assets/plugin/org.graylog.plugins.threatintel.ThreatIntelPlugin/plugin.org.graylog.plugins.threatintel.ThreatIntelPlugin.b864ba54b438ac0bdc48.js"></script>
    <script src="http://127.0.0.1:9000/assets/plugin/org.graylog.plugins.collector.CollectorPlugin/plugin.org.graylog.plugins.collector.CollectorPlugin.bcc87290018e859a8a9e.js"></script>
    <script src="http://127.0.0.1:9000/assets/plugin/org.graylog.aws.AWSPlugin/plugin.org.graylog.aws.AWSPlugin.8ae7cb13983ce33eeb5b.js"></script>
    <script src="http://127.0.0.1:9000/assets/app.a5e2fb591e8fd54ee4ef.js"></script>
  </body>
</html>

$ curl -i -H 'Accept: application/json' http://127.0.0.1:9000/api
HTTP/1.1 200 OK
X-Graylog-Node-ID: 327adb40-6e1f-48df-909f-8bcd35210324
X-Runtime-Microseconds: 34388
Content-Type: application/json
Date: Sat, 10 Aug 2019 16:07:45 GMT
Content-Length: 232
{  
   "cluster_id":"20ed5de4-4686-450e-8f12-a9abf225b17b",
   "node_id":"327adb40-6e1f-48df-909f-8bcd35210324",
   "version":"3.0.2+1686930",
   "tagline":"Manage your logs in the dark and have lasers going and make it look like you're from space!"
}

Graylog 3 Server 버전 업그레이드

  • Graylog 3 Server의 버전 업그레이드 방법은 설치 방법과 동일하다. 아래는 현재 최신 버전인 3.3.x 버전으로 업그레이드하는 예이다.
$ sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-3.3-repository_latest.rpm
$ sudo yum clean all
$ sudo yum install graylog-server
$ sudo systemctl restart graylog-server.service

Slack 알림 플러그인 설치

# Graylog 기본 플러그인 디렉토리로 이동
$ cd /usr/share/graylog-server/plugin

# Slack 플러그인 다운로드
$ sudo wget https://github.com/sportalliance/graylog-plugin-slack-notification/releases/download/1.0.5/graylog-plugin-slack-notification-1.0.5.jar

# 플러그인 적용을 위해 Graylog 재시작
$ sudo systemctl restart graylog-server.service

Graylog 3 Server, Docker 이미지로 설치

  • Graylog 3 ServerDocker 이미지로도 설치가 가능하다. 아래는 Docker Compose를 이용하여 MongoDB, Elasticsearch, Graylog를 한꺼번에 설치하고 실행하는 예이다.
# EPEL 저장소 설치
$ sudo yum install epel-release

# Amazon EC2일 경우 아래 방법으로 설치
$ sudo amazon-linux-extras install epel

# 앞서 설치한 EPEL 저장소에서 pwgen 패키지 설치
$ sudo yum install pwgen

# Graylog 3 비밀번호 해시 생성
$ sudo pwgen -N 1 -s 96
HPqJl4jE3EoLR0Kq0tHfJufjh9RY1dfFtTHPbAlyimvy0eQYk8PpGo50Zau5EOcu7RL9v2NCcg1OpvspgRh3AVPib6xB9YXe

$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: admin
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

$ mkdir graylog
$ cd graylog
$ nano docker-compose.yml
version: '3'
services:
  # MongoDB: https://hub.docker.com/_/mongo/
  mongo:
    image: mongo:3
    networks:
      - graylog
  # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      resources:
        limits:
          memory: 1g
    networks:
      - graylog
  # Graylog: https://hub.docker.com/r/graylog/graylog/
  graylog:
    image: graylog/graylog:3.3
    environment:
      # CHANGE ME (must be at least 16 characters)!
      - GRAYLOG_PASSWORD_SECRET=HPqJl4jE3EoLR0Kq0tHfJufjh9RY1dfFtTHPbAlyimvy0eQYk8PpGo50Zau5EOcu7RL9v2NCcg1OpvspgRh3AVPib6xB9YXe
      # Password: admin
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
      - GRAYLOG_ROOT_TIMEZONE=Asia/Seoul
    networks:
      - graylog
    depends_on:
      - mongo
      - elasticsearch
    ports:
      # Graylog web interface and REST API
      - 9000:9000
      # Syslog TCP
      - 1514:1514
      # Syslog UDP
      - 1514:1514/udp
      # GELF TCP
      - 12201:12201
      # GELF UDP
      - 12201:12201/udp
networks:
  graylog:
    driver: bridge

# MongoDB 3, Elasticsearch 6, Graylog 3 컨테이너 다운로드
$ docker-compose pull
Pulling mongo         ... done
Pulling elasticsearch ... done
Pulling graylog       ... done

# MongoDB 3, Elasticsearch 6, Graylog 3 컨테이너 시작
$ docker-compose up -d
Creating network "graylog_graylog" with driver "bridge"
Creating graylog_mongo_1         ... done
Creating graylog_elasticsearch_1 ... done
Creating graylog_graylog_1       ... done

# MongoDB 3, Elasticsearch 6, Graylog 3 컨테이너 프로세스 확인
$ docker-compose ps
         Name                        Command                       State                                                                     Ports
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
graylog_elasticsearch_1   /usr/local/bin/docker-entr ...   Up                      9200/tcp, 9300/tcp
graylog_graylog_1         tini -- /docker-entrypoint ...   Up (health: starting)   0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp, 0.0.0.0:1514->1514/tcp, 0.0.0.0:1514->1514/udp, 0.0.0.0:9000->9000/tcp
graylog_mongo_1           docker-entrypoint.sh mongod      Up
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함