安装 Elasticsearch:
Elasticsearch 可以用包管理器通过添加 Elastic 的包源列表进行安装。
用下面的命令来导入 Elasticsearch 公共 GPG 密钥到 apt:
1
|
wget -qO - https:
//packages
.elastic.co
/GPG-KEY-elasticsearch
|
sudo
apt-key add -
|
如果你的终端提示停在这里不动了,可能是在等你输入用户密码(为了授权 sudo 命令)。
创建 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
|
更新 apt 包数据库并安装elasticsearch:
1
2
|
sudo
apt-get update
sudo
apt-get -y
install
elasticsearch
|
安装好了,接下来编辑配置文档:
1
|
sudo
vi
/etc/elasticsearch/elasticsearch
.yml
|
要限制你的 Elasticsearch 接口(端口9200)外的访问,这样外人无法通过 HTTP API 读取数据或关闭您的 Elasticsearch 集群。找到 network.host,取消注释,用 localhost 替换它的值:
1
|
network.host: localhost
|
保存并退出 elasticsearch.yml。
现在,打开 Elasticsearch:
1
|
sudo
service elasticsearch restart
用root权限去启动elasticsearch 发现 Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME 原因是由于在root权限下取不到java ,在sedv权限下能取到,
所以要在elasticsearch 的配置文件 /etc/init.d/elasticsearch 中将JAVA_HOME 改成绝对路径
|
然后运行以下命令将在系统启动时启动 Elasticsearch:
1
|
sudo
update-rc.d elasticsearch defaults 95 10
|
现在 Elaticsearch 设置好也启动了,现在来安装 Kibana。
安装 Kibana:
Kibana 可以用包管理器通过添加 Elastic 的包源列表进行安装。
创建 Kibana 资源列表:
1
|
echo
"deb http://packages.elastic.co/kibana/4.4/debian stable main"
|
sudo
tee
-a
/etc/apt/sources
.list.d
/kibana-4
.4.x.list
|
更新 apt 包数据源并安装:
1
2
|
sudo
apt-get update
sudo
apt-get -y
install
kibana
|
这样就安装好了。
打开 Kibana 配置文件编辑:
1
|
sudo
vi
/opt/kibana/config/kibana
.yml
|
在文件中找到 server.host,用 localhost 替换0.0.0.0:
1
|
server.host:
"localhost"
|
保存,退出。这个操作让 Kibana 只能被 localhost访问。不要担心,我们会用 Nginx反向代理来允许外部访问。
现在启用 Kibana 服务:
1
2
|
sudo
update-rc.d kibana defaults 96 9
sudo
service kibana start
|
在使用 Kibana Web 界面的之前,我们必须安装反向代理。接下来就来安装 Ngnix 吧!(著:如果不用反向代理的话,上一步是不需要把server.host改为localhost,直接访问该主机的5601端口即可)
安装 Ngnix:
因为我们配置了 Kibana 监听 localhost,我们必须安装反向代理来允许外部访问。这里就使用 Ngnix 来达成这个目的。
注意:如果你已经有要用的 Ngnix 实例,那就直接使用。只要记得去配置 Kibana,让 Ngnix server 可以访问(你可能需要在 /opt/kibana/config/kibana.yml 改变 host 的值为你的 Kibana server 的 private IP 或者 hostname)。此外,建议您启用 SSL / TLS。
用 apt 安装 Ngnix 和 Apache2-utils:
1
|
sudo
apt-get
install
nginx apache2-utils
|
用htpasswd命令创建一个 admin 用户,叫 Kibanaadmin(根据自己喜好命名),用来访问 Kibana Web 界面:
1
|
sudo
htpasswd -c
/etc/nginx/htpasswd
.
users
kibanaadmin
|
在命令提示终端输入密码。记住用户名和密码,稍候你需要用它来访问Kibana Web界面。
现在用你喜欢的编辑器打开 Nginx 的默认服务器模块。我们将用 vi:
1
|
sudo
vi
/etc/nginx/sites-available/default
|
删除文件中的内容,复制下面的代码块到文件中。请确保 server_name 和你的 server_name 匹配:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# cat /etc/nginx/sites-available/default
server {
listen 80;
server_name example.com;
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;
}
}
|
保存,退出。这个 Nginx 的配置通过监听 localhost:5601,让你的服务器的 HTTP 流量直接到 Kibana 应用程序。此外,Nginx 的将使用我们前面创建的 htpasswd.users 文件,也会要求基本身份验证。
现在重启 Nginx 让之前的改变生效:
1
|
sudo
service nginx restart
|
Kibana 现在是可访问的,通过 FQDN 也就是你的 ELKServer 公共 IP 地址。http://elk_server_public_ip/ 如果你在浏览器中访问这个地址,然后输入 “kibanaadmin” 验证。这样,你就可以看到 Kibana 的欢迎界面,在这里它会要求你配置 index 类型。不要管那么多拉,我们待会再来研究,先回去安装其他组件。
安装 Logstash:
Logstash 软件包和 Elasticsearch 的在同一个版本库,之前我们已经添加了这个公共密钥。所以,直接创建 Lostash 的资源列表:
1
|
echo
'deb http://packages.elastic.co/logstash/2.2/debian stable main'
|
sudo
tee
/etc/apt/sources
.list.d
/logstash-2
.2.x.list
|
更新 apt 包数据源并安装:
1
2
|
sudo
apt-get update
sudo
apt-get
install
logstash
|
安装好了!但是还没有配置。
生成 SSL 证书:
因为我们是使用 Filebeat 从 Client Server 传输日志到服务器 ELK Server,所以需要创建一个SSL 证书和密钥对。Filebeat 用该证书验证 ELK Server 的身份。创建将存储证书和私钥使用目录:
1
2
|
sudo
mkdir
-p
/etc/pki/tls/certs
sudo
mkdir
/etc/pki/tls/private
|
你有生成 SSL 证书的两种选择。如果你有一个 DNS 设置,让您的客户端服务器解析服务器 ELK 的 IP 地址,使用选项2。否则,使用选项1,将允许您使用 IP 地址。
选项1:IP 地址 (我选的是选项1)
如果你没有 DNS 设置——它允许你收集 log 的服务器,解析你的 ELK Server 的 IP 地址——你必须添加 ELK Server 的 private IP 地址到的 SSL 证书的 SubjectAltName(SAN)。要做这一步,打开 OpenSSL 的配置文件:
1
|
sudo
vi
/etc/ssl/openssl
.cnf
|
找到文件中[ v3_ca ]板块,在下面添加这一行(替换 ELK Server 的 private IP 地址):
1
|
subjectAltName = IP: ELK_server_private_IP
|
保存,退出。
现在在相应位置产生 SSL 证书和私钥(在 /etc/PKI/TLS/),使用下面的命令:
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 文件将被复制到所有将日志发送到 Logstash 的服务器上——稍候,我们会做这一步。让我们继续完成 Logstash 配置。如果您使用了此选项,跳过选项2并到配置 Logstash 这一步。
选项2
如果你有个人网络的 DNS 设置,你应创建一个包含 ELK Server 的 private IP 地址的 A 记录——这个域名将在接下来的命令中使用,来生成 SSL 证书。或者,你可以用一个指向该服务器的公共 IP 地址的记录。只要确保你的服务器(收集日志的服务器)将能够解析域名到你的 ELK Server。
现在生成 SSL 证书和私钥:
1
2
|
cd
/etc/pki/tls
sudo
openssl req -subj
'/CN=ELK_server_fqdn/'
-x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private
/logstash-forwarder
.key -out certs
/logstash-forwarder
.crt
|
文件将被复制到所有将日志发送到 Logstash 的服务器上——稍候,我们会做这一步。让我们继续完成 Logstash 配置。
配置 Logstash:
Logstash 配置文件是 JSON 格式的,放在
1
|
/etc/logstash/conf
.d
|
创建一个叫 02-beats-input.conf 的配置文件,并配置 “filebeat” 的input:
1
|
sudo
vi
/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"
}
}
|
保存,退出。指定的 beats 输入会监听 TCP 端口5044,它将使用我们前面创建的 SSL 证书和私钥。
现在来创建 10-syslog-filter.conf 配置文件,在这里面我们会添加 syslog 信息的 filter:
1
|
sudo
vi
/etc/logstash/conf
.d
/10-syslog-filter
.conf
|
输入下面的 syslog filter 配置信息:
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"
]
}
}
}
|
保存,退出。这个 filter 查询 syslog 类型的 logs(通过 Filebeat),而且它会使用grok来解析传入的 syslog 日志,使之结构化和可查询。
最后,我们创建 30-elasticsearch-output.conf 配置文件:
1
|
sudo
vi
/etc/logstash/conf
.d
/30-elasticsearch-output
.conf
|
输入下面的 output 配置信息:
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]}"
}
}
|
保存,退出。这个 output 主要是配置 Logstash 去存储运行在 localhost:9200上的Elasticsearch beat 数据,这里有一个命名要求,由被使用的 beat 来命名(在这个情况下是filebeat)。
如果你想给其他使用 Filebeat input 的 application 添加 filters,请确保命名文件让它们在 input 和 output 的配置之间排序(即,02-和30-之间)。
测试 Logstash 的配置信息:
1
|
sudo
service logstash configtest
|
显示 Configuration OK 是对的,否则是错误的。请查看错误信息以确定 Logstash 配置信息那里出错了。
显示Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME.
我将/opt/logstash/bin/logstash.lib.sh 配置文件中的JAVA_HOME 用/app/jdk1.8.0_65 来替换 得到
if [ -n "/app/jdk1.8.0_65" ] ; then
JAVACMD="/app/jdk1.8.0_65/bin/java" 再次运行
sudo
service logstash configtest
|
重启 Logstash,并启动,让改变的配置信息生效:
1
2
|
sudo
service logstash restart
sudo
update-rc.d logstash defaults 96 9
|
现在,我们来加载样例 Kibana 仪表盘。
加载 Kibana仪表盘:
Elastic 提供了几种 Kibana 的仪表盘样例和 beat 索引模式,来帮助你开始使用 Kibana。虽然在我们的教程中不会使用仪表盘,但是不管怎么我们都可以用它包含的 Filebeat 和索引模式加载它们。
首先,下载仪表盘样例,存到你的 home 目录:
1
2
|
cd
~
curl -L -O https:
//download
.elastic.co
/beats/dashboards/beats-dashboards-1
.1.0.zip
|
安装 unzip 包并解压:
1
2
|
sudo
apt-get -y
install
unzip
unzip beats-dashboards-*.zip
|
然后加载仪表盘样例、可视化和 beat 索引模式到 Elasticsearch:
1
2
|
cd
beats-dashboards-*
.
/load
.sh
|
这些是刚才我们加载的索引模式:
-
[packetbeat-]YYYY.MM.DD
-
[topbeat-]YYYY.MM.DD
-
[filebeat-]YYYY.MM.DD
-
[winlogbeat-]YYYY.MM.DD
当我们使用 Kibana,选择 Filebeat 索引模式作为我们的默认模式。