
How to install Graylog Log Server in CentOS 7 Linux
In this tutorial, you will learn how to install Graylog Server on CentOS 7. Graylog is a leading centralized log management solution built with fast, interactive log analysis of data from all of your servers. for more information you can refer to Graylog website.
1- Install JAVA
If you don’t have a Java Runtime Environment (JRE) already, you’ll have to install it
first.
Any JRE should work, as long as it’s version 1.7 or later. Typically, you install the
one from Oracle (www.java.com/en/download/index.jsp) or the open-source implementation,
OpenJDK (http://download.java.net/openjdk/)
Install JAVA 8 (It’s recommended to install Oracle Java):
Download .rpm file from http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.
#yum -y install /download_path/jdk-8u-linux-x64.rpm
verify Java version:
#java -version
Set JAVA_HOME and JRE_HOME environment variables:
#echo "export JAVA_HOME=/usr/java/jdk1.8.0_/" >> ~/.bash_profile #echo "export JRE_HOME=/usr/java/jdk1.8.0_/jre" >> ~/.bash_profile #source ~/.bash_profile
2- Install Elasticsearch
Download .rpm file from https://www.elastic.co/downloads/past-releases. Download 5.6.x version (Elasticsearch 6.x.x is not compatible with Graylog 2.3.x).
yum install -y elasticsearch-5.6.4.rpm
open the Elasticsearch default configuration file:
#vim /etc/elasticsearch/elasticsearch.yml
Find the “cluster.name: my-application”, uncomment it and change the value from my-application to graylog.
cluster.name: graylog
#Add ES_HEAP_SIZE to /etc/sysconfig/elasticsearch like this :
ES_HEAP_SIZE=
#Add to file /etc/security/limits.conf:
elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited
Start Elasticsearch and enable it:
#systemctl enable elasticsearch #systemctl start elasticsearch
Verify that Elasticsearch is working properly by running:
#curl -XGET 'localhost:9200/?pretty'
Open port 9200 tcp on firewall
You should see output similar to the following:
{ "name" : "node-1", "cluster_name" : "graylog", "cluster_uuid" : "tV_f28DQQpeq1qW5HaCC9g", "version" : { "number" : "5.6.4", "build_hash" : "8bbedf5", "build_date" : "2017-10-31T18:55:38.105Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" }
3- Install MongoDB
Download following .rpm files from https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.4/x86_64/RPMS/:
mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools
Install MongoDB:
#yum install -y /download_path/mongodb-org-mongos #yum install -y /download_path/mongodb-org-server #yum install -y /download_path/mongodb-org-shell #yum install -y /download_path/mongodb-org-tools #yum install -y /download_path/mongodb-org
Start MongoDB server and enable it:
#systemctl start mongod #systemctl enable mongod
4- Install Graylog Server
Download the latest repository for Graylog server:
#rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.3-repository_latest.rpm #yum -y update
Install Graylog by running:
#yum -y install graylog-server
5- Configure Graylog
Install pwgen utility to generate strong passwords:
#yum -y install pwgen
Now generate a strong password secret:
#pwgen -N 1 -s 96
You will output similar to:
#pwgen -N 1 -s 96 pJqhNbdEY9FtNBfFUtq20lG2m9daacmsZQr59FhyoA0Wu3XQyVZcu5FedPZ9eCiDfjdiYWfRcEQ7a36bVqxSyTzcMMx5Rz8v
Also, generate a 256-bit hash for the password of the root admin user:
echo -n StrongPassword | sha256sum
Replace StrongPassword with the password you wish to set for admin user. So you will see:
#echo -n StrongPassword | sha256sum 05a181f00c157f70413d33701778a6ee7d2747ac18b9c0fbb8bd71a62dd7a223 -
Open the Graylog configuration file:
#vim /etc/graylog/server/server.conf
Find password_secret =, copy and paste the password generated through pwgen command:
password_secret = pJqhNbdEY9FtNBfFUtq20lG2m9daacmsZQr59FhyoA0Wu3XQyVZcu5FedPZ9eCiDfjdiYWfRcEQ7a36bVqxSyTzcMMx5Rz8v
Find root_password_sha2 =, copy and paste the converted SHA 256-bit hash of your admin password:
root_password_sha2 = 05a181f00c157f70413d33701778a6ee7d2747ac18b9c0fbb8bd71a62dd7a223
Set Timezone to your location:
timedatectl set-timezone `timedatectl list-timezones | grep Zagreb`
Uncomment and set your time zone at root_timezone:
root_timezone = Europe/Zagreb
Enable the web-based Graylog interface by uncommenting
web_enable = false and setting the value to true: web_enable = true
Also uncomment and change the following lines as specified:
rest_listen_uri = http://0.0.0.0:9000/api/ rest_transport_uri = http://your_public_IP:9000/api/ web_listen_uri = http://0.0.0.0:9000/
Restart the Graylog service by running:
#systemctl restart graylog-server
6- Configure NGINX as a Reverse Proxy
By default, the Graylog web interface listens to localhost on port 9000 and the API listens on port 9000 with URL /api.
In this tutorial, we will use Nginx as the reverse proxy so that the application can be access via standard HTTP port.
So install Nginx web server based on this doc from source code with-stream:
https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/
https://www.nginx.com/resources/wiki/start/topics/examples/systemd/
Open the default virtual host:
#vim /etc/nginx/nginx.conf
Find the server block under http, and replace the whole server block with the following lines:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name <log.afranet.com|your_url> ; location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Graylog-Server-URL http://$server_name/api; proxy_pass http://127.0.0.1:9000; } }
Start Nginx and enable it to start automatically at boot time:
#systemctl start nginx #systemctl enable nginx
7- Configure firewall and SELinux
We recommend to install csf for firewall. So refere to how to install CSF on CentOS 7 Linux.
then open the ports: 80,443,9200
If you have SELinux enabled on your system, then you will need to add a few exceptions in SELinux policies.
#setsebool -P httpd_can_network_connect 1 #semanage port -a -t http_port_t -p tcp 9000 #semanage port -a -t http_port_t -p tcp 9200 #semanage port -a -t mongod_port_t -p tcp 27017
You can now access the Graylog server on http://your_public_ip or http://graylog.example.com