您的位置 首页 golang

ELK实时日志分析平台

前言

调研了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 &

文章来源:智云一二三科技

文章标题:ELK实时日志分析平台

文章地址:https://www.zhihuclub.com/101286.shtml

关于作者: 智云科技

热门文章

网站地图