ELK+Filebeats框架搭建问题整理
Elaticsearch
问题出现环境,OS版本:CentOS-7-x86_64-Minimal-1708;ES版本:elasticsearch-6.2.2。
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量
ulimit -Hn ulimit -Sn
修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效
* soft nofile 65536 * hard nofile 65536

2、max number of threads [3818] for user [es] is too low, increase to at least [4096]
问题同上,最大线程个数太低。修改配置文件/etc/security/limits.conf(和问题1是一个文件),增加配置
* soft nproc 4096 * hard nproc 4096
可通过命令查看
ulimit -Hu ulimit -Su

修改后的文件:

3、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
vi /etc/sysctl.conf
sysctl -p
执行命令sysctl -p生效

4、各部件启动命令记录:
filebeats: ./filebeat -e -c filebeat.yml &
logstash: ./bin/logstash -f config/logstash.conf &
elasticsearch:./bin/elasticsearch &
kibana:nohup ./kibana &
5、使用filebeat收集不同日志,logstash创建不同索引:


filebeats:
input {
#beats输入插件
beats {
#绑定主机
host => "0.0.0.0"
#绑定端口
port => 5044
#额外添加字段,这里是为了区分来自哪一个插件
add_field => {"[fields][class]" => "beats"}
}
syslog {
#绑定端口
port => 514
#额外添加字段,这里是为了区分来自哪一个插件
add_field => {"[fields][class]" => "json"}
}
}
filter {
#处理来自beats插件的日志,beats这里收集的是tomcat的日志
# 样例:192.168.68.88 - - [16/Mar/2020:11:22:08 +0800] "GET /esws/testService/test?name=天道酬勤&size=50 HTTP/1.1" 200 15315
if [fields][class] == "beats"{
#grop过滤插件,在编写grop时,可以使用kibana,kibana上有编写工具,无需自己搭建(官方grok速度太慢)
grok {
#解析Apache日志,自动分割
match => { "message" => "%{COMMONAPACHELOG}" }
}
#键值过滤器
kv {
#对request字段操作
source => "request"
按照& ? 分割
field_split => "&?"
value_split => "="
#选取自己需要的分割后的字段
include_keys => ["op","reportlet","formlet"]
}
#解码
urldecode {
#解码全部字段
all_fields => true
}
#日期处理插件
date {
#日期匹配,匹配格式可以有多个
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
#匹配的日期存储到字段中
target => "@timestamp"
}
# 数据修改
mutate{
#移除指定字段
remove_field => ["agent","beat","offset","tags","prospector","log","ident","[host][name]","[host][hostname]","[host][architecture]","[host][os]","[host][id]","auth","[input][type]"]
#复制字段
copy => { "@timestamp" => "timestamp" }
#copy => { "[fields][fields_type]" => "fields_type" }
copy => { "formlet" => "reportlet" }
}
mutate{
#替换
gsub => ["reportlet", "%2F", "/"]
}
if ! [fields_type] {
mutate{
copy => { "[fields][fields_type]" => "fields_type" }
}
}
date{
match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
locale => "cn"
}
#ip解析,分析IP的位置
geoip{
source => "clientip"
}
}
#处理来自syslog插件的日志
if [fields][class] == "json"{
json {
source => "message"
}
if [host] == "192.168.68.100" {
mutate{
add_field => {"fields_type" => "firewall"}
}
}
}
if ! [fields_type] {
mutate{
add_field => {"fields_type" => "error-221"}
}
}
}
output {
elasticsearch {
action => "index"
#填写ES集群
hosts => ["http://node-01:9200","http://node-02:9200","http://node-03:9200"]
#ES如果有登陆验证,要配置用户名和密码
# user => "admin"
# password => "123456"
#按字段值,存入不同的索引中
index => "%{fields_type}-%{+YYYY-MM}"
}
}
6、Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.2.2-1/config/jvm.options
elasticsearch用户没有该文件夹的权限,执行命令
chown -R es:es /usr/local/elasticsearch/
7、新建一个拥有root权限的账号:
useradd -u 0 -o -g root -G root -d /home/username username
usermod -u 0 -o -g root -G root username
说明:
-u 0:指将uid指定为0(零)与root相同,登录后的提示符为#而非$。
-o:指因为重复了uid(与root帐号的uid重复)必须指定这个参数。
-g root:初始化组的组名,当用户属于多个组时,(在-G参数中指定),登录时所在组。缺省该项时,系统新建一个与用户名同名的组,并且初始化时设为该组名。而不论-G指定为哪些组。
-G root:指定用户名所属的组列表,一个用户可以属于多个组,组名间用逗号分隔,组名必须已经存在。
-d /home/username:指定用户的属主目录
username 新建的用户名为username
为新用户新建密码
passwd username
设置密码后就可以使用新用户登录了。
Root为普通用户授予JAVA权限 sudo chmod -R 755 java安装目录 sudo chown -R [username] java安装目录

浙公网安备 33010602011771号