参考文章:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/
环境:
- 两台 CentOS 6.5
- elasticsearch-2.4.1
- kibana-4.6.1
- logstash-2.4.0
- filebeat-1.3.1
过程:
- 安装 JDK
- 安装 Elasticsearch
- 安装 Kibana
- 安装 Nginx
- 安装 Logstash
- 配置 Logstash
- 安装 filebeat
- 访问
ELK 服务器中:
安装 Java 环境
https://www.java.com/zh_CN/download/manual.jsp
中下载java
安装包解压到
/usr/local/jdk
目录下在
/etc/profile
文件中追加:
export JAVA_HOME=/usr/local/jdk
export CLASS_PATH=$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
- 使设置的环境变量生效。
source /etc/profile
安装 Elasticsearch
在
https://www.elastic.co/downloads
中下载Elasticsearch
的安装包。解压,并移动到
/usr/local/elasticsearch
目录下。
$ tar xvf elasticsearch-2.4.1.zip
$ mv elasticsearch-2.4.1 /usr/local/elasticsearch
- 修改
/usr/local/elasticsearch/config/elasticsearch.yml
,来更改监听端口,监听127.0.0.1
,提高安全性。
# 如下更改
network.host: 127.0.0.1
- 启动(会有报错)
$ cd /usr/local/elasticsearch/
$ bash bin/elasticsearch -d
# 会有报错,信息如下:
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
-d
是让es
保持后台运行。
报错信息提示我们es
无法用root
用户启动,所以可以创建elk
用户,来启动es
安装 kibana
在
https://www.elastic.co/downloads
中下载kibana
的安装包。解压,并移动到
/usr/local/kibana
目录下。修改
/usr/local/kibana/config/kibana.yml
,来更改监听端口,监听127.0.0.1
# 修改如下
server.host: "127.0.0.1"
- 启动,观察
/usr/local/kibana/nohup.out
是否有报错信息
$ cd /usr/local/kibana
$ nohup bin/kibana &
安装 Nginx
- 直接
yum
安装
$ yum install nginx
- 修改
/etc/nginx/conf.d/default.conf
文件,如下:
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:5601/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
- 启动
nginx
# 测试配置是否正常
$ nginx -t
# 启动
$ /etc/init.d/nginx start
安装 Logstash
在
https://www.elastic.co/downloads
中下载Logstash
的安装包。解压,并移动到
/usr/local/logstash
目录下。验证服务可用性
$ cd /usr/local/logstash
$ bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 2
Pipeline main started
# 任意输入,看输出是否正常,如下:
hello
2016-10-13T10:07:01.502Z satezheng hello
# CTRL-D 退出
配置 Logstash
我们需要配置 Logstash
以指明从哪里读取数据,向哪里输出数据。这个过程我们称之为定义 Logstash
管道(Logstash Pipeline
)。
通常一个管道需要包括必须的输入(input
),输出(output
),和一个可选项目 Filter
配置 ssl
客户端和服务器之间通信使用ssl
来认证身份,更加安全。
- 修改
/etc/pki/tls/openssl.cnf
文件
# 找到 [v3_ca] 段,添加下面一行,保存退出。
subjectAltName = IP: logstash_server_ip
- 生成
srt
文件
$ cd /etc/pki/tls
$ openssl req -config openssl.cnf -x509 -days 2650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
- 发送
srt
文件到客户端
$ cd /etc/pki/tls
$ scp certs/logstash-forwarder.crt 客户端IP:/etc/pki/tls/certs
配置 Logstash 管道文件
- 创建
filebeat-input.conf
文件
$ mkdir /usr/local/logstash/conf
$ cd /usr/local/logstash/conf
$ vim filebeat-input.conf
# 写入:
input {
beats {
port => 5044
type => "logs"
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
- 创建
filebeat-output.conf
文件
$ vim filebeat-input.conf
# 写入:
output {
elasticsearch { hosts => ["127.0.0.1:9200"] }
stdout { codec => rubydebug }
}
启动
$ cd /usr/local/logstash
$ nohup bin/logstash -f conf/ &
客户端安装 filebeat
filebeat
代替之前的ogstash-forwarder
在
https://www.elastic.co/downloads/beats/filebeat
下载解压并放到
/usr/local/filebeat
目录下修改
filebeat.yml
$ cd /usr/local/filebeat
$ vim filebeat.yml
写入:
filebeat:
prospectors:
-
paths:
- /var/log/*
input_type: log
document_type: log
registry_file: /var/lib/filebeat/registry
output:
logstash:
hosts: ["服务端IP:5044"]
tls:
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
shipper:
logging:
files:
rotateeverybytes: 10485760 # = 10MB
- 启动
$ cd /usr/local/filebeat
$ nohup ./filebeat -e -c filebeat.yml &