查看日志的传统方法是:登录操作系统,使用命令工具如cat、tail、sed、awk、grep等等进行过滤输出后分析,处理少量日志还好,日志量大处理效率就没那么高了。而且很多情况下开发人员需要查看并分析日志进行排错,但他们对Linux命令又不是太熟悉,而且有时候又不能赋予他们服务器权限,更多时候是运维把日志文件导出来发给开发人员,这无疑会给我们增加工作量。ELK(Elasticsearch+Logstash+Kibana)架构就是专门为采集、分析、存储日志所设计的:
Elasticsearch:基于Lucenne的搜索服务器,提供一个分布式多用户的全文搜索引擎,能过做到实时搜索。
Logstash:可以对日志进行采集、过滤、输出。
Kibana:可以汇总、分析、搜索日志数据并提供友好的web界面。
工作流程:logstash agent监控并过滤日志,为了保证日志的完整性先将日志内容输出到RabbitMQ进行存储;logstash
indexer再把RabbitMQ上的日志队列收集后发送给全文搜索服务器Elasticsearch,然后可以用Elasticsearch进行自定
义搜索,再通过Kibana来结合自定义搜索进行页面展示。
从官网下载软件logstash、elasticsearch、kibana以及JRE,分别在相应主机上安装
1
2
3
4
|
wget
&
nbsp
;
https
:
//download.elastic.co/kibana/kibana/kibana-4.5.3-1.x86_64.rpm
wget
&
nbsp
;
https
:
//download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.4/elasticsearch-2.3.4.rpm
wget
&
nbsp
;
https
:
//download.elastic.co/logstash/logstash/packages/centos/logstash-2.3.4-1.noarch.rpm
wget
&
nbsp
;
http
:
//download.oracle.com/otn-pub/java/jdk/8u101-b13/jre-8u101-linux-x64.rpm
|
安装RabbitMQ
1
|
yum
&
nbsp
;
install
&
nbsp
;
rabbitmq
-
server
|
启用RabbitMQ的web管理功能
1
2
|
/
usr
/
lib
/
rabbitmq
/
bin
/
rabbitmq
-
plugins
&
nbsp
;
enable
&
nbsp
;
rabbitmq_management
/
usr
/
lib
/
rabbitmq
/
bin
/
rabbitmq
-
plugins
&
nbsp
;
list
|
下载并安装命令管理工具rabbitmqadmin
1
2
3
|
wget
&
nbsp
;
http
:
//rabbitmq-server:15672/cli/rabbitmqadmin
mv
&
nbsp
;
rabbitmqadmin
&
nbsp
;
/
usr
/
local
/
bin
chmod
&
nbsp
;
+
x
&
nbsp
;
/
usr
/
local
/
bin
/
rabbitmqadmin
|
给rabbitmqadmin工具准备配置文件
1
2
3
4
5
6
|
# vim /etc/mqadmin.conf
[
default
]
hostname
&
nbsp
;
=&
nbsp
;
localhost
port
&
nbsp
;
=&
nbsp
;
55672
username
&
nbsp
;
=&
nbsp
;
liang
password
&
nbsp
;
=&
nbsp
;
liang123
|
创建一个vhost和user并赋权
1
2
3
4
5
|
rabbitmqctl
&
nbsp
;
add_user
&
nbsp
;
liang
&
nbsp
;
liang123
rabbitmqctl
&
nbsp
;
add_vhost
&
nbsp
;
elk
rabbitmqctl
&
nbsp
;
set_permissions
&
nbsp
;
-
p
&
nbsp
;
elk
&
nbsp
;
liang
&
nbsp
;
&
quot
;
.
*
&
quot
;
&
nbsp
;
&
quot
;
.
*
&
quot
;
&
nbsp
;
&
quot
;
.
*
&
quot
;
rabbitmqctl
&
nbsp
;
set_user_tags
&
nbsp
;
liang
&
nbsp
;
administrator
rabbitmqctl
&
nbsp
;
list_permissions
&
nbsp
;
-
p
&
nbsp
;
elk
|
创建一个exchange
1
|
rabbitmqadmin
&
nbsp
;
-
c
&
nbsp
;
/
etc
/
mqadmin
.
conf
&
nbsp
;
declare
&
nbsp
;
exchange
&
nbsp
;
--
vhost
=
elk
&
nbsp
;
name
=
elk_exchange
&
nbsp
;
type
=
direct
|
创建一个queue
1
|
rabbitmqadmin
&
nbsp
;
-
c
&
nbsp
;
/
etc
/
mqadmin
.
conf
&
nbsp
;
declare
&
nbsp
;
queue
&
nbsp
;
--
vhost
=
elk
&
nbsp
;
name
=
elk_queue
&
nbsp
;
durable
=
true
|
创建一个binding,绑定之前创建的exchange和queue并设置一个routing_key
1
|
rabbitmqadmin
&
nbsp
;
-
c
&
nbsp
;
/
etc
/
mqadmin
.
conf
&
nbsp
;
--
vhost
=
elk
&
nbsp
;
declare
&
nbsp
;
binding
&
nbsp
;
source
=&
quot
;
elk_exchange
&
quot
;
&
nbsp
;
destination
=&
quot
;
elk_queue
&
quot
;
&
nbsp
;
routing_key
=&
quot
;
elk_key
&
quot
;
|
以上关于RabbitMQ的配置均可以通过登录web控制台进行操作,更简单方便,这里就不再演示了。
给elasticsearch安装shield插件,用于权限控制,此插件是收费产品,可免费使用30天,到期后可降级使用,只是关于集群的一些功能将不可用。
1
2
3
|
cd
&
nbsp
;
/
usr
/
share
/
elasticsearch
bin
/
plugin
&
nbsp
;
install
&
nbsp
;
license
bin
/
plugin
&
nbsp
;
install
&
nbsp
;
shield
|
如有需要修改elasticsearch.yml,配置服务监听地址,默认监听在127.0.0.1上,端口是9200和9300;配置日志数据的存储路径,默认保存在/var/lib/elasticsearch下
1
2
|
path
.
data
:
&
nbsp
;
/
data
/
elastic_data
network
.
host
:
&
nbsp
;
192.168.X.X
|
配置shield,修改shield的权限控制文件roles.yml,修改默认角色logstash的权限,指定可创建的索引文件;并添加一个readonly的角色dashboard,用于控制用户在kibana上的权限。
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
|
logstash
:
&
nbsp
;
&
nbsp
;
cluster
:
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
manage_index_templates
&
nbsp
;
&
nbsp
;
indices
:
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
names
:
&
nbsp
;
[
&
nbsp
;
&
#39;logstash-*','nginx-*','tomcat-*' ]
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
privileges
:
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
write
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
delete
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
create_index
dashboard
:
&
nbsp
;
&
nbsp
;
indices
:
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;tomcat-*':
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
mappings
/
fields
/
get
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
validate
/
query
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
search
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
msearch
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
field_stats
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
get
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;.kibana':
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
exists
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
mappings
/
fields
/
get
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
refresh
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
admin
/
validate
/
query
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
get
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
mget
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
-
&
nbsp
;
indices
:
data
/
read
/
search
|
配置shield,创建用户logstash、kibana、readuser、admin并指定相应角色
1
2
3
4
5
|
cd
&
nbsp
;
/
usr
/
share
/
elasticsearch
/
bin
/
shield
.
/
esusers
&
nbsp
;
useradd
&
nbsp
;
logstash
&
nbsp
;
-
p
&
nbsp
;
123456
&
nbsp
;
-
r
&
nbsp
;
logstash
.
/
esusers
&
nbsp
;
useradd
&
nbsp
;
kibana
&
nbsp
;
-
p
&
nbsp
;
123456
&
nbsp
;
-
r
&
nbsp
;
kibana4_server
&
nbsp
;
&
nbsp
;
.
/
esusers
&
nbsp
;
useradd
&
nbsp
;
readuser
&
nbsp
;
-
p
&
nbsp
;
123456
&
nbsp
;
-
r
&
nbsp
;
dashboard
.
/
esusers
&
nbsp
;
useradd
&
nbsp
;
admin
&
nbsp
;
-
p
&
nbsp
;
123456
&
nbsp
;
-
r
&
nbsp
;
admin
|
启动Elasticsearch
1
|
service
&
nbsp
;
elasticsearch
&
nbsp
;
start
|
配置nginx服务器输出json格式日志
1
2
3
4
5
6
7
8
9
10
11
12
13
|
log_format
&
nbsp
;
json
&
nbsp
;
&
#39;{"@timestamp":"$time_iso8601",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"host":"$server_addr",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"clientip":"$remote_addr",' '"size":$body_bytes_sent,'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"responsetime":$request_time,'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"upstreamtime":"$upstream_response_time",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"upstreamhost":"$upstream_addr",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"http_host":"$host",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"url":"$uri",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"xff":"$http_x_forwarded_for",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"referer":"$http_referer",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"agent":"$http_user_agent",'
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
#39;"status":"$status"}';
access_log
&
nbsp
;
&
nbsp
;
/
usr
/
local
/
nginx
/
logs
/
api_json
.
log
&
nbsp
;
&
nbsp
;
json
;
|
配置logstash agent采集nginx日志并输出到RabbitMQ;为了排错,同时输出一份日志到本地。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# vim /etc/logstash/conf.d/ngx_log.conf
input
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
file
&
nbsp
;
{
path
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
/
usr
/
local
/
nginx
/
logs
/
api_json
.
log
&
quot
;
codec
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
json
&
quot
;
type
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
nginx
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
}
output
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
rabbitmq
&
nbsp
;
{
&
nbsp
;
host
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
RabbitMQ_server
&
quot
;
port
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
5672
&
quot
;
vhost
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk
&
quot
;
exchange
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_exchange
&
quot
;
exchange_type
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
direct
&
quot
;
key
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_key
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
user
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
password
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang123
&
quot
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
stdout
&
nbsp
;
{
&
nbsp
;
codec
&
nbsp
;
=&
gt
;
&
nbsp
;
rubydebug
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
|
配置tomcat服务器输出json格式日志,修改工程的logback.xml配置文件,添加如下配置
1
2
3
4
5
6
7
8
9
10
11
12
|
&
lt
;
appender
&
nbsp
;
name
=&
quot
;
LOGSTASH
&
quot
;
&
nbsp
;
class
=&
quot
;
ch
.
qos
.
logback
.
core
.
rolling
.
RollingFileAppender
&
quot
;
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
file
&
gt
;
$
{
catalina
.
base
}
/
logs
/
tomcat_json
.
log
&
lt
;
/
file
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
encoder
&
nbsp
;
class
=&
quot
;
net
.
logstash
.
logback
.
encoder
.
LogstashEncoder
&
quot
;
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
charset
&
gt
;
utf8
&
lt
;
/
charset
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
/
encoder
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
rollingPolicy
&
nbsp
;
class
=&
quot
;
ch
.
qos
.
logback
.
core
.
rolling
.
TimeBasedRollingPolicy
&
quot
;
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
fileNamePattern
&
gt
;
$
{
catalina
.
base
}
/
logs
/
tomcat_json
-
%
d
{
yyyy
-
MM
-
dd
}
.
log
&
lt
;
/
fileNamePattern
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
/
rollingPolicy
&
gt
;
&
nbsp
;
&
nbsp
;
&
lt
;
/
appender
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
root
&
nbsp
;
level
=&
quot
;
info
&
quot
;
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
appender
-
ref
&
nbsp
;
ref
=&
quot
;
LOGSTASH
&
quot
;
&
nbsp
;
/
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
lt
;
/
root
&
gt
;
|
下载依赖的jar包logstash-logback-encoder到{CATALINA_BASE}/lib
1
|
wget
&
nbsp
;
http
:
//central.maven.org/maven2/net/logstash/logback/logstash-logback-encoder/4.4/logstash-logback-encoder-4.4.jar
|
配置logstash agent采集tomcat日志并输出到RabbitMQ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# vim /etc/logstash/conf.d/tomcat_log.conf
input
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
file
&
nbsp
;
{
path
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
/
usr
/
local
/
tomcat
/
logs
/
tomcat_json
.
log
&
quot
;
codec
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
json
&
quot
;
type
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
tomcat
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
}
output
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
rabbitmq
&
nbsp
;
{
&
nbsp
;
host
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
RabbitMQ_server
&
quot
;
port
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
5672
&
quot
;
vhost
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk
&
quot
;
exchange
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_exchange
&
quot
;
exchange_type
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
direct
&
quot
;
key
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_key
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
user
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
password
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang123
&
quot
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
stdout
&
nbsp
;
{
&
nbsp
;
codec
&
nbsp
;
=&
gt
;
&
nbsp
;
rubydebug
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
|
配置logstash indexer把日志从RabbitMQ输出到Elasticsearch
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
31
32
33
34
35
36
37
38
|
# vim /etc/logstash/conf.d/rabbitmq.conf
input
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
rabbitmq
&
nbsp
;
{
host
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
127.0.0.1
&
quot
;
subscription_retry_interval_seconds
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
5
&
quot
;
vhost
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk
&
quot
;
exchange
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_exchange
&
quot
;
queue
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_queue
&
quot
;
durable
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
true
&
quot
;
key
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
elk_key
&
quot
;
user
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang
&
quot
;
password
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
liang123
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
}
output
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
if
&
nbsp
;
[
type
]
&
nbsp
;
==
&
nbsp
;
&
quot
;
nginx
&
quot
;
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
elasticsearch
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
hosts
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
Elasticsearch_server
:
9200
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
user
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
logstash
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
password
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
123456
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
index
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
nginx
-
%
{
+
YYYY
.
MM
.
dd
}
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
else
&
nbsp
;
if
&
nbsp
;
[
type
]
&
nbsp
;
==
&
nbsp
;
&
quot
;
tomcat
&
quot
;
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
elasticsearch
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
hosts
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
Elasticsearch_server
:
9200
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
user
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
logstash
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
password
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
123456
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
index
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
tomcat
-
%
{
+
YYYY
.
MM
.
dd
}
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
else
&
nbsp
;
{
file
&
nbsp
;
{
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
path
&
nbsp
;
=&
gt
;
&
nbsp
;
&
quot
;
/
var
/
log
/
logstash
/
unknown_messages
.
log
&
quot
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
}
&
nbsp
;
}
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
stdout
&
nbsp
;
{
&
nbsp
;
codec
&
nbsp
;
=&
gt
;
&
nbsp
;
rubydebug
&
nbsp
;
}
}
|
启动logstash服务
1
|
service
&
nbsp
;
logstash
&
nbsp
;
start
|
在RabbitMQ服务器上查看是否接收到日志消息,登录RabbitMQ的web控制台查看详细信息。
1
|
rabbitmqctl
&
nbsp
;
list_queues
&
nbsp
;
-
p
&
nbsp
;
elk
|
给kibana安装shield插件,用于权限控制
1
2
|
cd
&
nbsp
;
/
opt
/
kibana
/
bin
.
/
kibana
&
nbsp
;
plugin
&
nbsp
;
--
install
&
nbsp
;
kibana
/
shield
/
2.3.4
|
修改kibana的主配置文件kibana.yml,似乎启用权限控制后强制使用https,shield的加密key可以随便指定,会话超时时间默认是30分钟,超时时间的单位为毫秒
1
2
3
4
5
6
7
|
elasticsearch
.
username
:
&
nbsp
;
&
quot
;
kibana
&
quot
;
elasticsearch
.
password
:
&
nbsp
;
&
quot
;
123456
&
quot
;
elasticsearch
.
url
:
&
nbsp
;
&
quot
;
http
:
//elasticsearch_server:9200"
server
.
ssl
.
cert
:
&
nbsp
;
/
opt
/
kibana
/
ssl
/
kibana
.
crt
server
.
ssl
.
key
:
&
nbsp
;
/
opt
/
kibana
/
ssl
/
kibana
.
key
shield
.
encryptionKey
:
&
nbsp
;
&
quot
;
abc123
&
quot
;
shield
.
sessionTimeout
:
&
nbsp
;
600000
|
启动kibana
1
|
service
&
nbsp
;
kibana
&
nbsp
;
start
|
kibana启用后,就可以通过https://server:5601进行访问了。如有需要配置Apache做个反向代理
1
2
3
4
5
6
7
8
9
10
|
NameVirtualHost
&
nbsp
;
*
:
443
&
lt
;
VirtualHost
&
nbsp
;
*
:
443
&
gt
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
ProxyRequests
&
nbsp
;
on
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
SSLEngine
&
nbsp
;
on
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
SSLProxyEngine
&
nbsp
;
on
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
SSLCertificateFile
&
nbsp
;
/
opt
/
kibana
/
ssl
/
kibana
.
crt
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
SSLCertificateKeyFile
&
nbsp
;
/
opt
/
kibana
/
ssl
/
kibana
.
key
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
ProxyPass
&
nbsp
;
/
&
nbsp
;
https
:
//127.0.0.1:5601/
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
ProxyPassReverse
&
nbsp
;
/
&
nbsp
;
https
:
//127.0.0.1:5601/
&
lt
;
/
VirtualHost
&
gt
;
|
登录界面。
填入之前定义的索引文件,就可以处理日志了。
看到kibana有收到日志就算成功了。
至此,整个架构部署完毕,如有错误或不足之处,欢迎指正。