ELK Stack这套东西是什么,看这篇文章的估计都有所了解,我这里也不介绍了,这里我只是把我在实际项目中搭建这套环境的过程和笔记分享给大家。如果有什么问题可以留言交流
安装包自己到官网下载,我使用的版本是6.4.0
filebeat-6.4.0-linux-x86_64.tar.gz
logstash-6.4.0.tar.gz
elasticsearch-6.4.0.tar.gz
kibana-6.4.0-linux-x86_64.tar.gz
节点部署
192.168.0.94 filebeat,elasticsearch,kibana
192.168.0.131 elasticsearch-head,logstash
上传安装包
scp *.tar.gz [email protected]:/home/soft/elk/6.4.0
登录0.94主机并解压所有安装包
创建elastic用户组及elastic用户
elasticsearch不能使用root启动,不然会报错
groupadd elastic
useradd elastic -g elastic -p 123456
更改elk文件夹及内部文件的所属用户及组为elastic:elastic
chown -R elastic:elastic /home/soft/elk
切换到elastic用户再启动
su elastic
./bin/elasticsearch
停止es
jps
kill -9 {jps出来的进程编码}
遇到的问题与解决方法
[2019-04-04T15:38:50,451][ERROR][o.e.b.Bootstrap ] [Y_O2LI0] node validation exception
[2] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
虚拟内存数量超标,Linux限制一个进程可访问的VMA(虚拟内存)数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。
使用root用户修改/etc/sysctl.conf文件
vim /etc/sysctl.conf
添加内容
vm.max_map_count = 262144
检查查看
sysctl -p
修改es配置文件config/elasticsearch.yml
vim config/elasticsearch.yml
添加以下配置(属于gateway属性)
http.cors.enabled: true
http.cors.allow-origin: "*"
ip:9200
即可访问
修改es配置文件config/elasticsearch.yml
vim config/elasticsearch.yml
添加以下配置(属于Memory属性)
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
elasticsearch.yml
配置如下
cluster.name: appes
node.name: app-es-node-1
path.data: /home/soft/elk/6.4.0/elasticsearch-6.4.0/data
path.logs: /home/soft/elk/6.4.0/elasticsearch-6.4.0/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
cat config/elasticsearch.yml |grep -v '^#'
使用此命令查看
解压并修改配置文件
tar -zxvf kibana-6.4.0-linux-x86_64.tar.gz
cd kibana-6.4.0-linux-x86_64
vim config/kibana.yml
修改内容如下
server.port: 5601
server.host: "192.168.0.94"
server.name: "kibana94"
elasticsearch.url: "http://192.168.0.94:9200"
启动
cd bin
nohup ./kibana &
访问与验证:ip:5601
需要准备Node.js环境与Grunt环境
下载,解压,设置环境变量,生效。(0.94已经有node v6.11.5,此处未安装,经测试有问题,最好使用最新版本)
wget http://cdn.npm.taobao.org/dist/node/v10.15.3/node-v10.15.3-linux-x64.tar.xz
tar -xvf node-v10.15.3-linux-x64.tar.xz
创建软连接
ln -s /home/soft/node-v10.15.3-linux-x64/bin/node /usr/bin/node
ln -s /home/soft/node-v10.15.3-linux-x64/bin/npm /usr/bin/npm
node -v查看版本
npm install -g grunt-cli
grunt -version
查看版本grunt-cli v1.3.2
cd /home/soft/elasticsearch-head
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
cd elasticsearch-head-master
npm install -g cnpm --registry=https://registry.npm.taobao.org
修改配置文件Gruntfile.js,使head可以访问elasticsearch
vim Gruntfile.js
connect: {
server: {
options: {
hostname: '0.0.0.0',
port: 9100,
base: '.',
keepalive: true
}
}
}
启动
grunt server
报错
>> Local Npm module "grunt-contrib-clean" not found. Is it installed?
>> Local Npm module "grunt-contrib-watch" not found. Is it installed?
>> Local Npm module "grunt-contrib-connect" not found. Is it installed?
>> Local Npm module "grunt-contrib-jasmine" not found. Is it installed?
Warning: Task "connect:server" not found. Use --force to continue.
Aborted due to warnings.
升级node
cd ~
npm install -g n
n 10.15.3 stable
npm install grunt-contrib-clean
npm install grunt-contrib-watch
npm install grunt-contrib-connect
npm install grunt-contrib-jasmine
启动OK
后台启动
nohup grunt server &
可以修改
_site/app.js
文件中的localhost:9200
,改为主机ip:9200
用于初始化head连接es
http://ip:9100/
tar -xvf logstash-6.4.0.tar.gz
cd logstash-6.4.0
cp logstash-sample.conf first-pipeline.conf
修改first-pipeline.cof
input {
kafka {
bootstrap_servers => ["192.168.0.131:9092,192.168.0.136:9092,192.168.0.137:9092"]
topics => "filebeat"
group_id => "es"
codec => json
}
}
filter {
grok {
match => {
"message" => "^\[(?%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}?)\]\|(?[-%{WORD}]+?)\|(?[\w-]+?)\|%{LOGLEVEL:loglevel}"
}
}
date {
match => ["createtime", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
}
mutate{
remove_field => ["beat.name"]
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.94:9200"]
document_type => "APP-LOG"
#host => "%{[@host][beat]}"
#index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
codec => json 由于beat传输数据给kafka集群的时候,会附加很多tag,默认情况下,logstash就会将这串tag也认为是message的一部分。这样不利于后期的数据处理。所有需要添加codec处理。得到原本的message数据。
启动脚本start.sh
#!/bin/bash
nohup ./bin/logstash -f config/first-pipeline.conf --config.reload.automatic &
–path.data=/home/softs/elk/logstash-6.4.0是指存放数据的路径,不加的话不知道是否默认这里
tar -xvf filebeat-6.4.0-linux-x86_64.tar.gz
cd filebeat-6.4.0-linux-x86_64
cp filebeat.yml filebeat-kafka.yml
修改filebeat-kafka.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/logs/app-*-info.log
# 向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。
# 默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level
# 这个得意思就是会在es中多添加一个字段,格式为 "filelds":{"level":"debug"}
fields:
host: 192.168.0.94
# 每个filebeat对应的机器的ip,区分日志机器来源
multiline.pattern: ^\[
multiline.negate: true
multiline.match: after
# 上面配置的意思是:不以[开头的行都合并到上一行的末尾
#pattern:正则表达式
#negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
#match:after 或 before,合并到上一行的末尾或开头
#-------------------------- Kafka output ------------------------------
output.kafka:
hosts: ["192.168.0.131:9092","192.168.0.136:9092","192.168.0.137:9092"]
topic: filebeat
required_acks: 1
# 其他output都注释掉
启动脚本start.sh
#!/bin/bash
nohup ./filebeat -e -c filebeat-kafka.yml -d "publish" > /dev/null 2>&1 &