前言
调研了ELK技术栈,发现新一代的logstash-forward即Filebeat,使用了golang,性能超logstash,部署简单,占用资源少,可以很方便的和logstash和ES对接,作为日志文件采集组件。所以决定使用ELK+Filebeat的架构进行平台搭建。Filebeat是Beats家族的一员,后续可以使用Packetbeat进行网络数据采集、Winlogbeat进行Windosw事件采集、Heartbeat进行心跳采集、Metricbeat进行系统指标采集。这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。
各组件承担的角色和功能:
· Elasticsearch :分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
· Logstash:数据处理引擎,它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到 ES;
· Kibana:数据分析和可视化平台。与 Elasticsearch 配合使用,对数据进行搜索、分析和以统计图表的方式展示;
· Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,使用 golang 基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析。
ELK 部署架构
这种架构引入了消息队列kafka ,截止到目前为止,filebeat 已经支持kafka作为output,把logstash 日志收集发送替换为了filebeat ,这种架构是当前最为完美的,有极低的客户端采集开销,引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性。
软件版本
备注:部署ELK相关的机器都要调整:
1、修改文件限制
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2、调整进程数
vim /etc/security/limits.d/90-nproc.conf
* soft nproc 4096
root soft nproc unlimited
3、调整虚拟内存&最大并发连接
vim /etc/sysctl.conf
net. ipv4 .ip_forward = 1
vm.max_map_count = 262144
fs.file-max = 655360
sysctl -p
4、安装 Java
4.1、解压 jdk
cd /opt/
tar -xzf jdk-8u65-linux-x64.tar.gz -C /usr/local/
cd /usr/local
mv jdk1.8.0_65/ java
4.2、配置环境变量
# jdk
JAVA_HOME=/usr/local/java
JRE_HOME=/usr/local/java/jre
CLASSPATH =$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
4.3、查看JAVA是否安装成功
java -version
[root@localhost local]# java -version
java version “1.8.0_65”
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
5、安装kafka
tar -xzf kafka_2.11-1.1.0.tgz -C /usr/local/
mv /usr/local/kafka_2.11-1.1.0/ /usr/local/kafka
cd /usr/local/kafka/
先启动: zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties&
然后启动kafka server:
nohup bin/kafka-server-start.sh config/server.properties&
创建一个topic:
bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test
查看当前的topic
bin/kafka-topics.sh –list –zookeeper localhost:2181
发送消息:
> bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test
This is a message
This is another message
接收消息:
> bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic test–from-beginning
This is a message
This is another message
备注:在这里我们把所有的端口监听都改为0.0.0.0 监听
6、安装elasticsearch
6.1、解压elasticsearch
wget
unzip elasticsearch-6.3.0.zip -d /usr/local/
6.2、创建ES用户和组
groupadd elsearch
useradd elsearch -g elsearch
passwd elsearch
密码:elsearch123
chown -R elsearch:elsearch /usr/local/elasticsearch-6.3.0/
6.3、创建ES数据文件和日志文件
直接在root用户根目录一下创建
mkdir /es_data
chown -R elsearch:elsearch /es_data/
切换用户:
su - elsearch
创建 es的data和logs目录:
cd /es_data
mkdir -p es/data
mkdir -p es/logs
exit
6.4、修改ES配置文件
cd /usr/local/elasticsearch-6.3.0/ config /
vi elasticsearch.yml
path.data: /es_data/es/data
path.logs: /es_data/es/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
6.5、启动elasticsearch
su – elsearch
cd /usr/local/elasticsearch-6.3.0/bin
./elasticsearch
./elasticsearch -d 后台执行
ps aux | grep elastic 查看进程
6.6、测试访问
访问:
7、安装Logstash
wget
tar -xzf logstash-6.3.0.tar.gz -C /usr/local/
一个Logstash的pipeline由3部分组成:input, filter, output:
cd /usr/local/logstash-6.3.0/config
cat logstash.conf
input {
kafka {
bootstrap_servers =>”127.0.0.1:9092″
topics => [“logs”]
group_id =>”nginx”
codec =>”json”
consumer_threads => 5
decorate_events => true
auto_offset_reset =>”latest”
}
}
filter { if [fields][log_topics] == “logs” {
mutate {
remove_field => [“beat”,”source”,”prospector”,”@version”,”offset”,”host”,”input” ]
}
}
}
output
{ if [fields][log_topics] == “logs”{
elasticsearch {
hosts => [“127.0.0.1:9200”]
index =>”timesheet-%{+YYYY.MM.dd}”
}
}
stdout{codec => rubydebug }
}
cat jvm.options
-Xms512m
-Xmx512m
启动logstash
nohup ./bin/logstash -f ./config/logstash.conf &