在使用单机上,按我上篇博客讲解的,完全可以实现,但是我在实现集群,什么样的集群呢?我首先说一下,我的集群环境。
集群的使用的ELK的版本:
logstash.2.4.0
elasticsearch.2.4.0
kibana.4.6.0
shield.2.4.0
下面说一下我怎么样搭建的使用ELK的,logstash是单独的布置在要监控的主机上的,Elasticsearch和kibana是搭建在局域网的专有的服务器上;logstash实现的传送数据通过TCP和UDP直接发送数据;
1、logstash配置文件的书写
input {
tcp {
port => 5000
type => syslog
codec => plain { charset => "ISO-8859-1" }
}
udp {
port => 5000
type => syslog
codec => plain { charset => "ISO-8859-1" }
}
}
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}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => ["http://10.0.0.120:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
user => "logstashserver"
password => "123456"
}
stdout { codec => rubydebug }
}
2、roles.yml文件添加的角色代码
syslog_role:
indices:
'logstash-server,logstash-stdin':
- indices:admin/mappings/fields/get
- indices:admin/validate/query
- indices:data/read/search
- indices:data/read/msearch
- indices:admin/get
修改kibana4_server角色如下
kibana4_server:
cluster:
- cluster:monitor/nodes/info
- cluster:monitor/health
indices:
'.kibana':
- indices:admin/exists
- indices:admin/mapping/put
- indices:admin/mappings/fields/get
- indices:admin/refresh
- indices:admin/validate/query
- indices:data/read/get
- indices:data/read/mget
- indices:data/read/search
- indices:data/write/delete
- indices:data/write/index
- indices:data/write/update
- indices:admin/create
3.可能遇到问题
1)数据发送到Elasticsearch上但是在kibana上无法显示出来,这个问题可能是两台虚拟机的时钟不同步,因为kibana上默认的是显示15分钟内变化的数据。如果时钟相差很大就无法显示出来。我是在部署的时候遇到了这个问题,困扰我很长时间,最后用REST API查看数据发现时钟不同步导致的。
2)虽然shield实现了用户权限的管理,但是存在一定的不足之处,在用户登录的时候是授权了kibana的权限,这个权限是可以看到所有的用户创建的index,这个index是在kibana上创建的index,但是用户只能访问自己的index,其他的知识看到而已,无法做到完全的屏蔽,主要是因为这个kibana权限是读.kibana文件,而所有用户的index都是记录在这个文件上的。
4、测试用到的命令
向TCP端口用命令推送数据:
echo -n “454545454545454” >/dev/udp/本机的IP/开放的端口号