轉載自:http://blog.topspeedsnail.com/archives/4825
如果是自己試驗的性質,可考慮不裝ssh。
Ubuntu 16.04 搭建 ELK 日志分析平台
我要搭建的ELK Stack圖示:
ELK服務器建議配置:
- 內存不少於4G
- CPU:2
- Ubuntu 16.04
#1 安裝Java JDK
Elasticsearch和Logstash都是使用java寫的,所以我們需要安裝Java,Elasticsearch建議安裝Oracle Java 8(OpenJdk應該也行):
#2 安裝Elasticsearch
導入Elasticsearch的GPG公鑰:
1
|
$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
|
添加Elasticsearch倉庫源:
1
|
$ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
|
安裝elasticsearch:
1
2
|
$ sudo apt-get update
$ sudo apt-get install elasticsearch
|
安裝完成之后,配置Elasticsearch:
1
|
$ sudo vim /etc/elasticsearch/elasticsearch.yml
|
為了系統安全,我們需要限制外部網絡訪問Elasticsearch(9200端口)。取消下面一行注釋,並把值替換為localhost:
1
|
network.host: localhost
|
啟動Elasticsearch服務:
1
|
$ sudo systemctl start elasticsearch
|
設置Elasticsearch開機自啟:
1
|
$ sudo systemctl enable elasticsearch
|
#3 安裝Kibana
添加Kibana倉庫源:
1
|
$ echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list
|
安裝kibana:
1
2
|
$ sudo apt-get update
$ sudo apt-get install kibana
|
配置Kibana:
1
|
$ sudo vim /opt/kibana/config/kibana.yml
|
去掉server.host一行的注釋,並把值改為localhost:
1
|
server.host: "localhost"
|
上面配置了只能從本地訪問Kibana;因為我們要使用Nginx做反向代理。
啟動Kibana服務:
1
2
|
$ sudo systemctl enable kibana
$ sudo systemctl start kibana
|
#4 安裝Nginx
安裝:
1
|
$ sudo apt-get install nginx
|
使用openssl創建一個管理員(admin),這是用來登錄Kibana web接口的:
1
2
|
$ sudo -v
$ echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
|
按照提示設置admin用戶的密碼。
編輯Nginx配置文件:
1
|
$ sudo vim /etc/nginx/sites-available/default
|
把文件中的內容替換為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
server {
listen 80;
server_name your_domain_or_IP;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
|
把your_domain_or_IP替換為你服務器的IP或域名;
檢查Nginx配置語法:
1
|
$ sudo nginx -t
|
重啟Nginx:
1
|
$ sudo systemctl restart nginx
|
如果開啟了防火牆,配置允許nginx通行:
1
|
$ sudo ufw allow 'Nginx Full'
|
測試;使用瀏覽器訪問 http://your_domain_or_IP,輸入前面設置的密碼:
如果配置沒有問題,你應該能看到如下頁面:
#5 安裝Logstash
添加Logstash軟件源:
1
|
$ echo "deb http://packages.elastic.co/logstash/2.3/debian stable main" | sudo tee -a /etc/apt/sources.list
|
安裝Logstash:
1
2
|
$ sudo apt-get update
$ sudo apt-get install logstash
|
由於客戶端服務器需要使用Filebeat來向ELK服務器發送日志,為了增強日志傳輸的安全,我們可以使用SSL加密。首先創建存放SSL證書的目錄:
1
2
|
$ sudo mkdir -p /etc/pki/tls/certs
$ sudo mkdir /etc/pki/tls/private
|
創建SSL證書的兩種選擇:
- 直接使用IP地址
- 如果你有架設DNS服務器解析IP,可以使用域名
選擇1)使用IP地址:
在生成SSL證書之前,先配置openssl:
1
|
$ sudo vim /etc/ssl/openssl.cnf
|
在v3_ca一段中,添加一行:
1
|
subjectAltName = IP: ELK_server_IP
|
把ELK_server_IP替換為ELK服務器的ip地址。
生成SSL證書:
1
2
|
$ cd /etc/pki/tls
$ sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
|
要把logstash-forwarder.crt復制到要給ELK發送日志的服務器上。
選擇2)使用域名:
確保DNS的A記錄指向ELK服務器IP。
創建SSL證書:
1
2
|
$ cd /etc/pki/tls
$ sudo openssl req -subj '/CN=ELK_server_domain/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
|
把ELK_server_domain替換為你的域名。
配置Logstash:
創建配置文件:
1
|
$ sudo vim /etc/logstash/conf.d/02-beats-input.conf
|
寫入內容:
1
2
3
4
5
6
7
8
|
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
|
監聽接收日志的5044端口。配置防火牆打開5044端口:
1
|
$ sudo ufw allow 5044
|
創建配置文件:
1
|
$ sudo vim /etc/logstash/conf.d/10-syslog-filter.conf
|
寫入如下內容:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
|
設置接收的日志格式及類型。
創建配置文件:
1
|
$ sudo vim /etc/logstash/conf.d/30-elasticsearch-output.conf
|
寫入如下內容:
1
2
3
4
5
6
7
8
9
|
output {
elasticsearch {
hosts => ["localhost:9200"]
sniffing => true
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
|
Elasticsearch使用的端口9200。
Logstash文檔:https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html。
現在ELK服務器已經做好了接收日志的准備。
在客戶端服務上安裝配置Filebeat
把在ELK服務器上生成logstash-forwarder.crt證書傳到到客戶端服務上,可以使用scp;然后把證書復制的certs目錄:
1
2
|
$ sudo mkdir -p /etc/pki/tls/certs
$ sudo cp logstash-forwarder.crt /etc/pki/tls/certs/
|
安裝Filebeat;添加源和key:
1
2
|
$ echo "deb https://packages.elastic.co/beats/apt stable main" | sudo tee -a /etc/apt/sources.list.d/beats.list
$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
|
1
2
|
$ sudo apt-get update
$ sudo apt-get install filebeat
|
配置Filebeat:
1
|
$ sudo vim /etc/filebeat/filebeat.yml
|
在prospectors一段中,配置要發送的日志:
找到document_type,並把值改為syslog:
找到output一段,刪除或注釋掉整個Elasticsearch output一段;
去掉logstash注釋,hosts的值改為ELK_server_IP:5044,並添加一行:
找到tls一段:
啟動Filebeat:
1
2
|
$ sudo systemctl restart filebeat
$ sudo systemctl enable filebeat
|
現在filebeat就可以向ELK服務器發送syslog和auth.log日志了。