Elasticsearch
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
FileBeat
隶属于Beats,轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择,目前Beats包含四种工具:
- 1.Packetbeat(搜集网络流量数据)
- 2.Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。)
- 3.Filebeat(搜集文件数据)
- 4.Winlogbeat(搜集 Windows 日志数据)
为什么用 Filebeat ,而不用原来的 Logstash 呢?
原因很简单,资源消耗比较大。
**由于 Logstash 是跑在 JVM 上面,资源消耗比较大,后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级的 Agent 叫 Logstash-forwarder。**后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为 Filebeat。
Kibana
Kibana可以为 Logstash 、Beats和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
安装Java JDK
wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1536892035_945cb24c750d0971b8c5b1925cc723a9
mv jdk-8u181-linux-x64.tar.gz\?AuthParam\=1536892035_945cb24c750d0971b8c5b1925cc723a9 java
解压
tar -zxvf jdk-8u181-linux-x64.tar.gz
编辑环境变量
vim /etc/profile
在文件末尾加上
JAVA_HOME=/usr/local/jdk1.8.0_181/
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
使配置生效,并查看版本。
source /etc/profile
java -version
安装es
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
解压
tar -zxvf elasticsearch-6.2.4.tar.gz
进入Elasticsearch主目录,修改配置
vi config/elasticsearch.yml
添加以下配置,或者将对应的配置注释取消修改
network.host: 0.0.0.0
http.port: 9200
由于Elasticsearch不能使用root用户打开,所以需要专门创建一个用户来启动Elasticsearch
useradd elastic
#设置密码
passwd elastic
#需要输入2次密码
#授权
chmod -R 777 /usr/local/elasticsearch-6.2.4
#切换用户
su elastic
创建的用户名为elastic,其中/usr/local/elasticsearch-6.2.4为解压出来的Elasticsearch主目录
启动Elasticsearch
./bin/elasticsearch
如果遇到错误:max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[root@mes-1 config]# vim jvm.options ----将
-Xms1g ----修改成 -Xms2g
-Xmx1g ----修改成 -Xms2g
增加最大文件打开数
echo "* - nofile 65536" >> /etc/security/limits.conf
增加最大进程数
vim /etc/security/limits.conf ---在文件最后面添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
解释:
soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard xxx : 代表严格的设定,不允许超过这个设定的值。
nofile : 是每个进程可以打开的文件数的限制
nproc : 是操作系统级别对每个用户创建的进程数的限制
增加最大内存映射数(调整使用交换分区的策略)
+++++++++++++++++++++++++++++++++++++++++
vim /etc/sysctl.conf ---添加如下
vm.max_map_count=262144
vm.swappiness=0
+++++++++++++++++++++++++++
[root@mes-1 ~]# sysctl -p
解释:在内存不足的情况下,使用交换空间。
[root@mes-1 ~]# sysctl -w vm.max_map_count=262144
增大用户使用内存的空间(临时)
重启生效
curl 127.0.0.1:9200
会得到类似以下json
{
"name" : "dQIO4Ad",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "P8KtmO3vQdactRW1jX9JnQ",
"version" : {
"number" : "6.2.4",
"build_hash" : "ccec39f",
"build_date" : "2018-04-12T20:37:28.497551Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
安装Kibana
下载Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
解压
tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
进入主目录,修改配置
vi config/kibana.yml
添加以下配置或者取消注释并修改
elasticsearch.url: "http://es节点ip:9200"
server.host: "0.0.0.0"
kibana.index: ".kibana"
其中elasticsearch.url为Elasticsearch的地址,server.host默认是localhost,如果只是本地访问可以默认localhost,如果需要外网访问,可以设置为0.0.0.0
启动Kibana
./bin/kibana
安装FileBeat
下载FileBeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
解压
tar -zxvf filebeat-6.2.4-linux-x86_64.tar.gz
进入主目录,修改配置
vi filebeat.yml
找到类似以下的配置并修改
filebeat.prospectors:
- type: log
enabled: true #默认是false,改为true才能收集日志
paths:
- /var/xxx/*.log #需要收集日志的路径,注意 - 后面要有空格,注意空格,yaml格式
- /var/xxx/*.out
multiline.pattern: ^\[
multiline.negate: true
multiline.match: after
setup.kibana:
host: "localhost:5601"
output.elasticsearch:
hosts: ["es的ip:9200"]
启动FileBeat
./filebeat -c /usr/local/filebeat/filebeat.yml
/usr/local/filebeat/filebeat.yml为filebeat 的配置文件地址,需要根据实际情况修改,启动后FileBeat就会自动收集日志了
配置Kibana
访问kibana
kibana的ip+5601
使用filebeat默认模版
首先elasticsearch安装插件
cd /data/elasticsearch-6.2.4/bin/
./elasticsearch-plugin install ingest-user-agent
./elasticsearch-plugin install ingest-geoip
打开filebeat.yaml文件,编辑则是开启使用模版收集日志
filebeat.config.modules:
path:${path.config}/modules.d/*.yml
reload.enabled:true#开启使用模版收集
cd /data/filebeat-6.2.4-linux-x86_64/modules.d下可查看默认自带模版
cd /data/filebeat-6.2.4-linux-x86_64
#查看模版(Enabled是开启Disabled是未开启的)
./filebeat modules list
Enabled:
mysql
Disabled:
apache2
auditd
icinga
kafka
logstash
osquery
postgresql
redis
system
traefik
#开启模版
./filebeat modules enable kafka
Enabled kafka
#查看所有模型
/data/filebeat-6.2.4-linux-x86_64/modules.d
#可以看到开启的kafka
apache2.yml.disabled icinga.yml.disabled logstash.yml.disabled nginx.yml postgresql.yml.disabled system.yml.disabled
auditd.yml.disabled kafka.yml mysql.yml osquery.yml.disabled redis.yml.disabled traefik.yml.disabled
#打开kafka.yml进行配置
- module: kafka
# All logs
log:
enabled: true #改为true为开启
# Set custom paths for Kafka. If left empty,
# Filebeat will look under /opt.
#var.kafka_home:
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths: ["日志路径"]#配置采集日志的路径,如果不设置则会根据不同系统去按照默认的寻找。
启动elasticSearch&&filebeat可以看到生成新索引
curl 192.168.47.133:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana FzFQQBEBRXWU2GgWg_-vhA 1 0 144 1 167.9kb 167.9kb
yellow open filebeat-6.2.4-2024.01.10 cTJb1IqcTVWtue7Zx4i1UQ 3 1 74 0 48.7kb 48.7kb
filebeat是否输出到elasticsearch配置黑白名单
配置黑名单后则不会匹配输出。
配置白名单后则会只匹配白名单里的输出。
filebeat.prospectors:
- type: log
enabled: true #默认是false,改为true才能收集日志
paths:
- /var/xxx/*.log #需要收集日志的路径,注意 - 后面要有空格,注意空格,yaml格式
- /var/xxx/*.out
include_lines: ["^error","info"]#白名单匹配基础,区分大小写
exclude_lines: ["^error","info"]#黑名单匹配基础
tags: ["biaoqian"]#打标签
fields:
school: "shangxueyuan" #自定义字段
#加入下面这个配置没有了fields字段,school成了顶级字段
fields_under_root:true
自定义elasticsearch的索引模版
#首先要禁用索引生命周期
output.elasticsearch:
hosts: ["es的ip:9200"]
index: "test-linux-efk-%{+yyyy.MM.dd}" #自定义索引名称
setup.ilm.enabled:false #关闭索引生命周期,否则自定义索引名称不生效
setup.template.name: "test-linux"#设置索引模版名称
setup.template.pattern:"test-linux"#设置索引模版的匹配模式
根据不同的tag输出到不同的索引里
filebeat.prospectors:
- type: log
enabled: true #默认是false,改为true才能收集日志
paths:
- /var/xxx/*.log #需要收集日志的路径,注意 - 后面要有空格,注意空格,yaml格式
- /var/xxx/*.out
tags: ["123","456"]
# **采集的日志希望每个字段被拆分开则添加如下一行配置**
json.keys_under_root:true
output.elasticsearch:
hosts: ["es的ip:9200"]
indices:
- index: "test1-linux-efk-%{+yyyy.MM.dd}"
when.contains:
tags: "123"#根据tag不同,进入到不同的索引里了
- index: "test2-linux-efk-%{+yyyy.MM.dd}"
when.contains:
tags: "456"
setup.ilm.enabled:false #关闭索引生命周期,否则自定义索引名称不生效
setup.template.name: "test-linux"#设置索引模版名称
setup.template.pattern:"test-linux"#设置索引模版的匹配模式