开发环境
centos-release-7-3.1611.el7.centos.x86_64
elasticsearch-6.3.1
kibana-6.3.1
logstash-6.3.1
filebeat-6.3.1
1 ElasticSearch安装
- 下载ElasticSearch ,国内慢 找镜像站下载
wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz
tar -zxvf elasticsearch-6.3.1.tar.gz -C /opt/module/
mkdir data
- 修改配置文件/opt/module/elasticsearch-6.3.1/config/elasticsearch.yml
### node-1 192.168.9.101
### node-2 192.168.9.102
### node-3 192.168.9.103
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 集群名称,默认是elasticsearch
###保证三台服务器节点集群名称相同
cluster.name: my-application
#-----------------------Node-----------------------
# 节点名称,默认从elasticsearch-6.3.1/lib/elasticsearch-6.3.1.jar!config/names.txt中随机选择一个名称
###每个节点名称不一样,其他两台为node-1022,node-1033
node.name: node-101
#-----------------------Paths-----------------------
# 可以指定es的数据存储目录,默认存储在es_home/data目录下
path.data: /opt/module/elasticsearch-6.3.1/data
# 可以指定es的日志存储目录,默认存储在es_home/logs目录下
path.logs: /opt/module/elasticsearch-6.3.1/logs
#-----------------------Memory-----------------------
# 锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#-----------------------Network-----------------------
# 为es设置ip绑定,默认是127.0.0.1,也就是默认只能通过127.0.0.1 或者localhost才能访问
###实际服务器的ip地址
network.host: 192.168.9.101
#-----------------------Discovery-----------------------
# 当启动新节点时,通过这个ip列表进行节点发现,组建集群
# 默认节点列表:
###多个服务集群ip
discovery.zen.ping.unicast.hosts: ["192.168.9.101", "192.168.9.102","192.168.9.103"]
# 通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1
discovery.zen.minimum_master_nodes: 1
# 其他几台服务器只需修改node.name和network.host属性
# 分别启动每台服务器上的ES
# 在地址栏输入http://192.168.9.102:9200/_cat/nodes?pretty验证群集是否启动,带“*”证明是master节点,否则是slave节点
### es 容灾原理
###(1)ES会自动选举新的master;
###(2)ES在群集中会有多副本,异地备份能力;
###(3)故障恢复,数据恢复能力
- 配置本机环境
# soft nproc :单个用户可用的最大进程数量(超过会警告);
# hard nproc:单个用户可用的最大进程数量(超过会报错);
# soft nofile :可打开的文件描述符的最大数(超过会警告);
# hard nofile :可打开的文件描述符的最大数(超过会报错);
vi /etc/security/limits.conf
# 添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
# centos 7 为 20-nproc.conf centos 6 为 90-nproc.conf
vi /etc/security/limits.d/20-nproc.conf
#修改为
* soft nproc 4096
vi /etc/sysctl.conf
# 添加下面配置:
vm.max_map_count=655360
sysctl -p
# 然后,重新启动Linux,必须重启!!!
shutdown -r now
- 启动 ElasticSearch
//ElasticSearch 不能以 root 启动所以我们要新建一个用户
adduser elk
# 将es的拥有者和group改为elk
chown -R elk:elk /opt/module/elasticsearch-6.3.1/
su elk
bin/elasticsearch
- 验证 ElasticSearch
curl http://192.168.9.102:9200
2 Kibana 安装
- 下载Kibana ,国内慢 找镜像站下载
wget -c https://gitee.com/mirrors/kibana/repository/archive/v6.3.1
tar -zxvf kibana-6.3.1.tar.gz -C /opt/module/
- 修改 修改相关配置,kibana.yml
vi config/kibana.yml
# Kibana 端口
server.port: 5601
# Kibana ip
server.host: "192.168.9.102"
# elasticsearch 地址
elasticsearch.url: "http://192.168.9.102:9200"
- 启动Kibana
bin/kibana
- 验证是否启动成功
浏览器 http://59.110.167.61:5601/
3 Logstash 安装
- 下载Logstash ,国内慢 找镜像站下载
wget -c https://mirrors.huaweicloud.com/logstash/6.3.1/logstash-6.3.1.tar.gz
tar -zxvf logstash-6.3.1.tar.gz -C /opt/module/
- 验证 Logstash 是否安装成功
bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 输入 hellow 等待返回
{
"message" => "hellow",
"@version" => "1",
"host" => "iZ2zei02d9n5g3r7vch43bZ",
"@timestamp" => 2020-04-27T16:01:53.951Z
}
# 则安装成功
- Logstash 语法
区段input {},filter {},output {}
示例 官网插件例子地址
# /opt/module/logstash-6.3.1
mkdir job
vi job/test.conf
# 输入
input {
stdin { }
}
output {
stdout {codec=>"rubydebug"}
}
# 保存执行
bin/logstash -f job/test.conf --verbose --debug
logstash 日志收集
4 Filebeat 安装
wget -c https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.1-linux-x86_64.tar.gz
tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz -C /opt/module
- 配置 filebeat.yml
vi filebeat.yml
#=========================== Filebeat inputs =============================
## 配置 多 type 多目录日志收集
## 配置 Multiline 匹配多行消息
## 配置 fields 向输出的每一条日志添加额外的信息
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/tomcat/apache-tomcat-1/logs/*
tags: ["java-1"]
fields:
logIndex: tomcat
docType: tomcat-log
level: debug
fields_under_root: true
multiline:
pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
negate: true
match: after
- input_type: log
paths:
- /home/tomcat/apache-tomcat-2/logs/*
tags: ["java-2"]
fields:
logIndex: tomcat
docType: tomcat-log
level: error
fields_under_root: true
multiline:
pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
negate: true
match: after
#============================= Filebeat modules ===============================
#============================= Logstash output ===============================
# 输出设置
output.logstash:
# logstsh的ip地址
hosts: ["192.168.9.101:5044"]
loadbalance: true
index: filebeat
## 调优 避免 占用内存过大
## 是否因为通配符的原因,造成同时监控数量巨大的文件
## 是否文件的单行内容巨大,日志记录不规范
## 是否output经常阻塞,event queue里面总是一直缓存event
max_procs: 1
queue.mem.events: 256
queue.mem.flush.min_events: 128
- 启动 filebeat
## 文件要属于root 用户才能运行
chown -R root /opt/module/filebeat-6.2.1-linux-x86_64
## 查看启用或者禁用的模块列表
./filebeat modules list
## 启用模块
./filebeat modules enable logstash
## 检查配置是否正确
./filebeat -configtest
## 启动 filebeat
./filebeat -e -c filebeat.yml
- 配置 logstash 的 filebeat.conf
input {
# 接收filebeat读取的数据
beats {
port => 5044
}
}
# 日志例子
#100.116.237.39 - - [17/Jul/2019:11:13:28 +0800] "HEAD /xinyuyl-admin/index.html HTTP/1.0" 200 -
## 不懂的可以去看看 [grok入门](https://www.jianshu.com/p/443f1ea7b640)
filter {
grok {
match => {
"message" => "%{IPV4:ip_address} - - \[%{HTTPDATE:timestamp}\] %{QS:referrer} %{NUMBER:status} -"
}
}
date {
match => [ "timestamp","dd/MMM/yyyy:hh:mm:ss Z"]
target => "@timastamp"
timezone => "Asia/Shanghai"
}
mutate {
remove_field => ["message","host","@timestamp","@version"]
convert => {
"referrer" => "string"
}
split => ["referrer", " "]
add_field => {
"path" => "%{[referrer][1]}"
"Protocol" => "%{[referrer][2]}"
}
}
}
output {
# 输出到es
elasticsearch {
hosts => ["172.17.53.25:9200"]
index => "system-log-java-%{+YYYY.MM.dd}"
document_type => "log"
manage_template => false
}
}
- 测试 logstash 的 filter 是否能成功解析
# 验证 filebeat.conf 是否正确
./bin/logstash -f job/filebeat.conf -t
#调试启动
./bin/logstash -f job/filebeat.conf --verbose --debug
显示 json 即为成功
5 总结
- 启动 ElasticSearch
./elasticsearch-6.3.1/bin/elasticsearch -d
- 启动 Kibana
nohup ./kibana-6.3.1-linux-x86_64/bin/kibana >/dev/null 2>&1 &
- 启动 Logstash
nohup ./logstash-6.3.1/bin/logstash -f job/filebeat.conf >/dev/null 2>&1 &
- 启动 Filebeat
nohup ./filebeat-6.3.1-linux-x86_64/filebeat -e -c filebeat.yml >/dev/null 2>&1 &
下一章 出高可用elk 实例
参考:
Logstash 最佳实践