随着公司的发展,需要一个日志分析系统,来分析用户数据,为了调研,所以先使用elastic stack搭建了一个单节点的日志收集分析系统。
使用技术:elasticsearch7.1.1、cerebro0.9.0、kibana7.1.1、filebeat7.1.1。
# 添加用户组
groupadd esgroup
# 添加用户
useradd -g esgroup esuser
# 修改密码
passwd esuser
chown -R esuser:esgroup elasticsearch-7.1.1/
mkdir es_data
mkdir es_logs
chown -R esuser:esgroup es_data
chown -R esuser:esgroup es_logs
cd config/
vim elasticsearch.yml
# 以下是配置文件需要修改的地方
-----
# es集群名,用于扩展为多节点集群时的自动识别
cluster.name: wyc-log
# 当前节点名
node.name: node-1
# 数据存储路径
path.data: /home/elk/data/es_data
# 日志存储路径
path.logs: /home/elk/logs/es_logs
# 在centos6.x不支持SecComp功能,所以需要修改此设置为false,centos7.x不需要修改此配置
bootstrap.system_call_filter: false
# 绑定ip地址,0.0.0.0表示可以任意ip访问
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
# 初始化参与竞选master的节点
cluster.initial_master_nodes: ["node-1"]
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址(允许所有域名)
http.cors.allow-origin: /.*/
-----
su esuser
bin/elasticsearch
出现如下错误:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [esuser] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
# 修改以下配置
vim /etc/security/limits.conf
# 添加如下配置
esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096
vim /etc/sysctl.conf
# 添加如下配置
vm.max_map_count=655360
# 重新加载配置
sysctl -p
# 修改配置文件
vim config/elasticsearch.yml
#添加如下配置
xpack.security.enabled: true
# 生成证书
bin/elasticsearch-certutil ca -out config/elastic-certificates.p12 -pass ""
# 修改配置文件
vim config/elasticsearch.yml
#添加如下配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
# 生成密码(以下两个命令2选1)
# 随机密码
bin/elasticsearch-setup-passwords auto
# 自定义密码
bin/elasticsearch-setup-passwords interactive
vim conf/application.conf
# 修改以下配置
hosts = [
{
host = "http://ip:9200"
name = "wyc-log"
type = basic
auth = {
username = "elastic"
password = "xxx"
}
}
]
vim bin/cerebro
# 修改以下配置
# 在355行,修改java_cmd为jdk1.8的java命令
eclare java_cmd=/home/jdk/bin/java
# -Dhttp.port 指定启动端口
bin/cerebro -Dhttp.port=1235
vim config/kibana.yml
# 修改以下配置
-----
# 启动端口,默认5601
server.port: 5610
server.host: "xxx.xxx.xxx.xxx"
elasticsearch.hosts: ["http://xxx.xxx.xxx.xxx:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "xxx"
-----
bin/kibana
cp filebeat.yml wyc-es-query.yml
vim wyc-es-query.yml
# 以下是需要修改的配置项
-----
filebeat.inputs:
- type: log
enabled: true
paths:
- /xxx/*.log
setup.template.settings:
index.number_of_shards: 1
# 如果使用自定义索引名,则需要指定以下两个配置
setup.template.name: "esquerylog"
setup.template.pattern: "esquerylog-*"
# 7.x的版本中需要禁用此索引生命周期,否则在指定es索引名字的时候会有问题
setup.ilm.enabled: false
output.elasticsearch:
hosts: ["172.18.1.8:9200"]
index: "esquerylog-%{+yyyy.MM}"
username: "elastic"
password: "xxx"
# 配置自动解析json
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- decode_json_fields:
fields: ["message"] #要进行解析的字段
target: "querylog" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下
overwrite_keys: false #如果解析出的json结构中某个字段在原始的event(在filebeat中传输的一条数据为一个event)中也存在,是否覆盖event中该字段的值,默认值:false
process_array: false #数组是否解码,默认值:false
max_depth: 1 #解码深度,默认值:1
-----
./filebeat -c wyc-es-query.yml -e