首页 > 其他分享 >基于 ELK 分布式日志系统搭建

基于 ELK 分布式日志系统搭建

时间:2024-01-26 11:45:33浏览次数:32  
标签:ELK tar kafka 日志 8.12 logstash localhost 分布式

image-20231130154418783

0、前景

采用 ELK 搭建一套分布式日志系统

架构图

图片

1、ElastsiSearch

官网地址

Elasticsearch 8.12.0 | Elastic

1.1、安装

下载安装包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.12.0-linux-x86_64.tar.gz -C /usr/local/src

修改核心配置elasticearch.yml

cluster.name: my-application
node.name: node-1
path.data: ./data
path.logs: ./logs
networtk.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

修改JVM参数

- Xms128m
- Xmx128m

默认xms和xmx都是1g,虚拟机内存没这么大,修改一下即可,线上环境内存大可以不修改!

添加用户

ES不允许root用户运行

useradd esuser
chown -R esuser:esuser /usr/lcoal/elasticsearch-8.12.0-linux-x86_64

修改服务器配置

vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
vim /etc/sysctl.conf
vm.max_map_count=262145

刷新

sysctl -p

启动ES

nohup ./elasticsearch >es.log 2>&1 &

最新版本的ES启动会默认开启安全配置,url为:https://localhost:9200才能打开,且需要输入用户名和密码

测试阶段可以暂时关闭,修改elasticsearch.yml后重启

# Enable security features
xpack.security.enabled: false

查看进程

[root@xxx2 ~]# jps
53462 org.elasticsearch.bootstrap.Elasticsearch
115935 Jps
53375 CliToolLauncher
[root@xxx2 ~]#

2、Kibana

2.1、安装

官网地址

Kibana 8.12.0 | Elastic

下载8.12.0版本

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.12.0-linux-x86_64.tar.gz
tar -zxvf kibana-8.12.0-linux-x86_64.tar.gz -C /usr/local

修改核心配置

kibana.yml

#配置本机ip
server.host: "localhost"
#配置es集群url
elasticsearch.url: "http://localhost:9200"
server.host: "0.0.0.0"

启动

./kibana & # 如果在root下启动,需要添加--allow-root 

3、LogStash

Logstash 是一个数据管道,能够从各种数据源(比如 MySQL 数据库)收集数据,将数据从一处传输到另一处,并加以解析和转换

图片

3.1、安装

官网地址

Logstash:收集、解析和转换日志 | Elastic

此处我们下载最新版本8.12.0

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.12.0-linux-x86_64.tar.gz
tar -zxvf logstash-8.12.0-linux-x86_64.tar.gz -C /usr/local/src

直接运行不行,必须要输入、输出参数,此处设置输入源和输出源为控制台

./logstash -e "input {stdin {}} output {stdout{}}"

结果如下

[2024-01-25T15:21:19,766][INFO ][logstash.javapipeline    ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>125, "pipeline.sources"=>["config string"], :thread=>"#<Thread:0x589b120c /usr/local/src/logstash-8.12.0/logstash-core/lib/logstash/java_pipeline.rb:134 run>"}
[2024-01-25T15:21:20,406][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.64}
The stdin plugin is now waiting for input:
[2024-01-25T15:21:20,459][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
[2024-01-25T15:21:20,465][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
你好啊,Logstash
{
          "host" => {
        "hostname" => "xxx2"
    },
    "@timestamp" => 2024-01-25T07:21:33.750286507Z,
      "@version" => "1",
         "event" => {
        "original" => "你好啊,Logstash"
    },
       "message" => "你好啊,Logstash"
}

实际使用还是需要修改配置文件,配置路径为config,默认存在示例文件logstash-sample.conf

cp logstash-sample.conf console-es.conf
input {
  stdin {

  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "console_es_index"
    #user => "elastic"
    #password => "changeme"
  }
}

启动

bin/logstash -f config/console_es.conf

image-20240125151143419

可以看到控制台日志写入了ES

Kibana 开发工具输入 GET _cat/indices, 可以 看到 console_es 这个索引已经创建出来了

image-20240125161012504

查看索引的数据

image-20240125161112528

配置开机自启

cat > /usr/lib/systemd/system/logstash.service <<EOF
[Unit]
Description=logstash

[Service]
User=root
ExecStart=/usr/local/src/logstash-8.12.0/bin/logstash -f  /usr/local/src/logstash-8.12.0/config/filebeat_es.conf 
Restart=always

[Install]
WantedBy=multi-user.target
EOF

logstash日志记录在:logs/

4、Filebeat

采用Golang编写

一款轻量级的日志采集工具

官网地址

Filebeat 8.12.0 | Elastic

下载解压

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.0-linux-x86_64.tar.gz
tar  -zxvf  filebeat-8.12.0-linux-x86_64.tar.gz -C /usr/local/src

配置核心文件 filebeat.yml

# ------------------------------ Logstash Output -------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

# ============================== Filebeat inputs ===============================

filebeat.inputs:
- type: log
  id: my-filestream-id
  enabled: true
  paths:
    - /var/log/*.log

启动

bin/filebeat -e -c filebeat.yml 

filebeat没有采集到数据莫名会掉,这里配置开机自启

cat > /usr/lib/systemd/system/filebeat.service <<EOF
[Unit]
Description=Filebeat is a lightweight shipper for metrics.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target

[Service]
Environment="LOG_OPTS=-e"
Environment="CONFIG_OPTS=-c /usr/local/src/filebeat-8.12.0-linux-x86_64/filebeat.yml"
Environment="PATH_OPTS=-path.home /usr/local/src/filebeat-8.12.0-linux-x86_64 -path.config /usr/local/src/filebeat-8.12.0-linux-x86_64  -path.data /usr/local/src/filebeat-8.12.0-linux-x86_64/data -path.logs /usr/local/src/filebeat-8.12.0-linux-x86_64/logs"
ExecStart=/usr/local/src/filebeat-8.12.0-linux-x86_64/filebeat  $LOG_OPTS $CONFIG_OPTS $PATH_OPTS
Restart=always

[Install]
WantedBy=multi-user.target
EOF


systemctl daemon-reload
systemctl restart filebeat 
systemctl enable filebeat 

输入模块

  1. Log输入模块:
    • Log输入模块用于读取和收集已经存在的日志文件,例如应用程序生成的日志文件。
    • 它监视指定的日志文件,并定期检查文件的更新,然后将新增的日志行发送到目标位置(如Elasticsearch、Logstash等)。
    • Log输入模块适用于传统的日志文件收集场景,如应用程序日志、系统日志等。
  2. Filestream输入模块:
    • Filestream输入模块用于实时收集正在写入的日志文件,而不是已经存在的日志文件。
    • 它通过监控指定的目录,并跟踪正在写入的文件,将文件内容流式传输到目标位置。
    • Filestream输入模块适用于实时日志收集场景,如容器化应用程序、微服务架构等。

5、Kafka

测试,搭建单机版

5.1、部署zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local

修改配置并启动

vi zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181

启动

bin/zkSercer.sh start
5.2、部署kafka
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.12-3.6.1.tgz
tar -zxvf kafka_2.12-3.6.1.tgz -C /usr/local

修改配置文件

vi server.properties(单机部署,启动不用做修改)

broker.id=0
port=9092 #端口号
log.dirs=/usr/local/kafka/log/kafka #日志存放路径,上面创建的目录
zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181

启动Kafka之前启动ZK

kafka-server-start.sh

测试,创建Topic

bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

生产消息测试,向topic中写入数据

bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

打开另一个终端会话并运行控制台消费者客户端来阅读您刚刚创建的事件:

bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

6、完善日志框架

6.1 、架构图

Logstash 要同时接受多个 Filebeat 采集的日志,机器越多,部署的 Filebeat 也就越多,Logstash 的压力就会越大。虽然也可以像扩容 ES 一样增加 Logstash 的节点数,但是并不能从根本上解决问题,当日志量级增大到一定程度时,不仅是 Logstash,连 ES 集群都有可能撑不住!

因此,我们需要接入一些中间件来进行缓冲,首选的可靠且高性能的消息队列 Kafka(依赖分布式协调工具 Zookeeper)

图片

6.2、测试

修改filebeat配置 filebeat.yml

output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["localhost:9092"]

  # message topic selection + partitioning
  topic: topic_test 
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

修改logstash配置 kafka_es.conf

input{
    kafka {
        enable_auto_commit => true
        auto_commit_interval_ms => "500"
        codec => "json"
        bootstrap_servers => "localhost:9092"
        group_id => "group-01"
        auto_offset_reset => "latest"
        topics => "topic_test"
        consumer_threads => 3
   }

}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "kafka_es_index"
    #user => "elastic"
    #password => "changeme"
  }
  stdout { codec => rubydebug }
}

重启logstash 、filebeat后,打开kibana观察

重新创建了kafka_es_index索引

手动往/var/log/sun.log写入测试数据

ehco "zhangsan" >>/var/log/sun.log

按照流程,该数据会从 filebeat---->kafka--->logstash--->es-->kibana

观察

image-20240126111605818

参考

https://blog.csdn.net/qq_40977118/article/details/123488301

https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&mid=2247485369&idx=1&sn=d125e78d175e38684e92cceee7e09b16&scene=21#wechat_redirect

标签:ELK,tar,kafka,日志,8.12,logstash,localhost,分布式
From: https://www.cnblogs.com/nwnusun/p/17988991

相关文章

  • SpringBoot中集成XXL-JOB分布式任务调度平台,轻量级、低侵入实现定时任务
    场景XXL-JOBhttps://www.xuxueli.com/xxl-jobXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。特性:1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生......
  • ggrep让多行日志-无处遁形!
    相信大家都很喜欢用grep指令,查一下项目中有没有出错的,然后通过logid搜索相关出错的日志和一些关键参数,但是在多行日志的情况下就很难处理了,比如okhttp拦截器中分别打印了url,param和response,然后你想统计一下有多少成功的,有多少失败的,发现就比较难了。解决这个问题的方法,大多数选......
  • 企业级微服务项目实战《学成在线》学习日志(二)
    下面正式开始开发!课程查询开发习惯从底层开始,所以就从DAO层(mapper层)开始写,再写service。先在content-service写个测试类,配置和包看黑马的去。介绍下以前学过的分页查询插件courseBaseMapper,实质上就是在sql语句上加上limit等语句,可以看下测试类的代码:@SpringBootTestpublic......
  • boss老虎的机制以及其他boss的工作日志
    1.Enegy每次技能所消耗的体力2.Angry老虎收到攻击,以及未攻击到敌人会增加怒气3.angry增加致一定比例,那么该enegy消耗增加,而技能冷却缩短4.当老虎血量下降到一定的比例,会触发大招等技能老虎转向有问题:√跳跃一定要跳到玩家面前替换解决方案(跳跃+移动)老虎跑到玩家吗,面前时......
  • Nginx日志检测分析工具 - WGCLOUD
    WGCLOUD可以对Nginx的日志文件进行全面分析,包括IP、sql注入、搜索引擎蜘蛛爬取记录、HTTP响应状态码、访问量最高的IP统计、扫描统计等效果如下图......
  • (十六):ELFK日志收集系统
    1、环境准备1.1、安装部署ES参考:(二):ElasticSearch环境安装。1.2、安装部署FileBeat参考:(十五):FileBeat。1.3、安装部署Kibana参考:(三):Kibana安装。1.4、安装部署Logstash参考:(十三):Logstash安装。2、配置1.1、FileBeat配置修改filebeat.yml配置如......
  • 【精品教程】如何查看iOS崩溃日志
    简介当一个应用程序崩溃,会产生一个崩溃报告(crashreport),并存储到设备中。崩溃报告描述了应用程序崩溃的条件,通常包含每个执行线程的完整回溯。查看崩溃报告可以帮助我们了解应用程序的崩溃情况,并尝试修复问题。符号化崩溃报告崩溃报告需要进行符号化(symbolicated),才能够进行分析......
  • IIS日志——统计IP访问次数的一种方法
    配置IIS网站的日志如果没有显示日志功能,到添加删除程序添加windows功能  下载进行日志分析的两个工具LogParser(命令行工具),下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659LogParserStudio(图形化工具),下载地址:http://gallery.techn......
  • 支撑核心系统分布式改造,GaussDB为江南农商银行筑稳根基
    本文分享自华为云社区《支撑核心系统分布式改造,GaussDB为江南农商银行筑稳根基》,作者:华为云头条。在移动互联网快速普及的当下,金融机构能否提供便捷、智能、个性化的金融服务,成为关乎业务开展和企业成长的重要命题。高性能、高可用、高安全的数据库,则是金融服务背后的重要支撑。......
  • ELK运维文档
    Logstash目录LogstashMonitoringAPINodeInfoAPIPluginsInfoAPINodeStatsAPIHotThreadsAPIlogstashexporter指标插件管理离线安装插件更新插件移除插件使用Gem私有库性能调优TroubleshootingLogstashFAQlogstash可能出现的问题?如何保证logstash事件不丢失?logstash是否......