百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

ELK超详细配置(elk7.12)

csdh11 2025-04-08 13:13 20 浏览


ELK日志分析系统简介


ELK日志分析系统是Logstash、Elasticsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。


ELK日志分析系统组成


  • Elasticsearch(es):通过搭建群集;存储日志数据,索引日志数据
  • Logstash :收集日志,收集到了后给es存储
  • Kibana :视图形式展现日志信息,更加人性化


日志处理步骤


  • 将日志进行集中化管理
  • 将日志格式化(Logstash)并输出到Elasticsearch
  • 对格式化后的数据进行索引和存储(Elasticsearch)
  • 前端数据的展示(Kibana)



三款软件各自概念


Elasticsearch介绍


Elasticsearch的概述


提供了一个分布式多用户能力的全文搜索引擎。


Elasticsearch核心概念


  • 接近实时(NRT),Elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
  • 集群(cluster),一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是Elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点。强烈建议在配置Elasticsearch时,配置成集群模式。
  • 节点(node),节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到Elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为Elasticsearch的集群。
  • 索引(type),在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。


类型相对于关系型数据库的表


索引(库)–》类型(表)–》文档(记录)


分片和副本(shards&replicas)


在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,Elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。


每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。


在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。


默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。


Logstash介绍


  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)
  • Logstash的主要组件:
    • shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
    • indexer:日志存储者,负责接收日志并写入到本地文件
    • broker:日志hub,负责连接多个shipper和多个indexer
    • search and storage:允许对事件进行搜索和存储
    • web interface:基于Web的展示界面


Kibana介绍


  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示
  • 主要功能:
    • Elasticsearch无缝之集成
    • 整合数据,复杂数据分析
    • 让更多团队成员收益
    • 接口灵活,分享更容易
    • 配置简单,可视化多数据源
    • 简单数据导出


ELK日志分析系统部署


实验环境及准备


[root@localhost ~]# hostnamectl set-hostname elk-1
[root@localhost ~]# bash
[root@elk-1 ~]# vim /etc/hosts   ###添加本地解析,识别集群主机名
192.168.73.40 elk-1
192.168.73.50 elk-2


实验步骤


elk-1和elk-2中部署Elasticsearch


1、上传密钥,部署yum源,安装Elasticsearch及Java(两台节点)

[root@elk-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

[root@elk-1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

[root@elk-1 ~]# yum install -y elasticsearch java

[root@elk-1 ~]# java -version  ###查看Java版本
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)


2、修改Elasticsearch主配置文件

[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17行 集群名称 ###两个节点一致
cluster.name: abner

23行 节点名称 ###两个节点不同
node.name: elk-1

33行 工作目录
path.data: /data/es-data
path.logs: /var/log/elasticsearch/

43行 防止交换swap分区
bootstrap.memory_lock: true

54行 监听网络
network.host: 0.0.0.0

58行 端口
http.port: 9200

68行:discovery.zen.ping.unicast.hosts: ["elk-1", "elk-2"]    #集群发现通过单播实现,单播的主机名为"elk-1","elk-2"


3、创建工作目录并更改属主及属组,开启服务

[root@elk-1 ~]# mkdir -p /data/es-data
[root@elk-1 ~]# chown -R elasticsearch.elasticsearch /data/es-data
[root@elk-1 ~]# systemctl start elasticsearch.service
[root@elk-1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      46814/java


4、测试




5、两种方法和ES进行交互


  • 第一种:Java API
  • 第二种:RESTful API (通过json格式交互)


[root@elk-1 ~]# curl -i -XGET 'http://192.168.73.40:9200/_count?pretty' -d '{
> "query": {
>     "match_all": {}
> }
> }'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 95

{
  "count" : 0,
  "_shards" : {
    "total" : 0,
    "successful" : 0,
    "failed" : 0
  }
}


6、两个节点安装elasticsearch-head插件(安装插件可以更加人性化的管理集群)

[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
……省略内容
Installed head into /usr/share/elasticsearch/plugins/head ###安装位置


7、测试——输入
192.168.73.40:9200/_plugin/head/



8、复合查询




9、删除



10、node-01和node-02日志提示不让锁内存


[root@elk-1 ~]# less /var/log/elasticsearch/abner.log
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited


[root@elk-1 ~]# vim /etc/security/limits.conf  ###末尾插入
[root@elk-1 ~]# systemctl stop elasticsearch.service
[root@elk-1 ~]# systemctl start elasticsearch.service


11、安装监控组件

[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
……省略内容
Installed kopf into /usr/share/elasticsearch/plugins/kopf  ###安装路径



Apache主机中安装Logstash并做日志搜集


1、修改主机名

[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# bash


2、安装apache服务

[root@apache ~]# yum install -y httpd
[root@apache ~]# systemctl start httpd


3、安装Java环境,没有自带安装使用yum -y install java安装

[root@apache ~]# yum install -y java
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 1:java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@apache ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)


4、上传密钥,部署yum源,安装Logstash

[root@apache ~]# vi /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

[root@apache ~]# yum install -y logstash
[root@apache ~]# ln -s /opt/logstash/bin/* /usr/local/bin ###优化执行路径


5、Logstash(apache)与Elasticsearch(node)功能是否正常,做对接测试

Logstash命令选项解释:
-f:指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
-t:测试配置文件是否正确,然后退出
#输入采用标准输入,输出采用标准输出

定义输入和输出流,类似管道
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'


6、使用rubydebug显示详细输出,codec为一种编解码器

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydeb


7、使用Logstash将信息输出给Elasticsearch

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.73.40:9200"] } }'
Settings: Default filter workers: 1
Logstash startup completed

abc123
tom456
123jerry


8、打开浏览器输入
http://192.168.73.40:9100/,查看索引信息,显示新的数据信息说明输出到Elasticsearch成功



9、在Apache主机中做对接配置

[root@apache ~]# chmod o+r /var/log/messages  ###允许其他用户访问
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 439103 11月 18 15:20 /var/log/messages

[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input {                       ###Logstash输入:从/var/log/messages输入,类型为system,起始位
        file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
        }
      }

output {                      ###Logstash输出:输出给Elasticsearch(以IP地址指定位置)
        elasticsearch {
        hosts => ["192.168.73.40:9200"]
        index => "system-%{+YYY.MM.dd}"
        }
      }
     
[root@apache ~]# systemctl restart logstash


10、打开浏览器输入
http://192.168.73.40:9100/,查看索引信息,显示新的索引信息代表Logstash搜集到的日志信息成功输出给Elasticsearch



在node1主机安装Kibana


1、在node1主机安装Kibana

[root@elk-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@elk-1 ~]# vim kibana-4.3.1-linux-x64/config/kibana.yml
//2行 
server.port: 5601

//5行
server.host: "0.0.0.0"


//12行 ES地址
elasticsearch.url: "http://192.168.73.40:9200"

//20行
kibana.index: ".kibana"

yum install screen -y


[root@elk-1 ~]# kibana-4.3.1-linux-x64/bin/kibana  ###启动监听
  log   [15:43:45.084] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
  log   [15:43:45.105] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [15:43:45.113] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
  log   [15:43:45.119] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
  log   [15:43:45.123] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
  log   [15:43:45.125] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
  log   [15:43:45.132] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
  log   [15:43:45.135] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
  log   [15:43:45.136] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready
  log   [15:43:45.146] [info][listening] Server running at http://0.0.0.0:5601


2、浏览器中登录http://192.168.73.40:5601,首次登录提示创建一个索引名字:填入system-*,即对接系统日志文件名。




原文链接:https://blog.csdn.net/weixin_47403060/article/details/109758406

相关推荐

探索Java项目中日志系统最佳实践:从入门到精通

探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...

用了这么多年的java日志框架,你真的弄懂了吗?

在项目开发过程中,有一个必不可少的环节就是记录日志,相信只要是个程序员都用过,可是咱们自问下,用了这么多年的日志框架,你确定自己真弄懂了日志框架的来龙去脉嘛?下面笔者就详细聊聊java中常用日志框架的...

物理老师教你学Java语言(中篇)(物理专业学编程)

第四章物质的基本结构——类与对象...

一文搞定!Spring Boot3 定时任务操作全攻略

各位互联网大厂的后端开发小伙伴们,在使用SpringBoot3开发项目时,你是否遇到过定时任务实现的难题呢?比如任务调度时间不准确,代码报错却找不到方向,是不是特别头疼?如今,随着互联网业务规模...

你还不懂java的日志系统吗 ?(java的日志类)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

谈谈枚举的新用法--java(java枚举的作用与好处)

问题的由来前段时间改游戏buff功能,干了一件愚蠢的事情,那就是把枚举和运算集合在一起,然后运行一段时间后buff就出现各种问题,我当时懵逼了!事情是这样的,做过游戏的都知道,buff,需要分类型,且...

你还不懂java的日志系统吗(javaw 日志)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

Java 8之后的那些新特性(三):Java System Logger

去年12月份log4j日志框架的一个漏洞,给Java整个行业造成了非常大的影响。这个事情也顺带把log4j这个日志框架推到了争议的最前线。在Java领域,log4j可能相对比较流行。而在log4j之外...

Java开发中的日志管理:让程序“开口说话”

Java开发中的日志管理:让程序“开口说话”日志是程序员的朋友,也是程序的“嘴巴”。它能让程序在运行过程中“开口说话”,告诉我们它的状态、行为以及遇到的问题。在Java开发中,良好的日志管理不仅能帮助...

吊打面试官(十二)--Java语言中ArrayList类一文全掌握

导读...

OS X 效率启动器 Alfred 详解与使用技巧

问:为什么要在Mac上使用效率启动器类应用?答:在非特殊专业用户的环境下,(每天)用户一般可以在系统中进行上百次操作,可以是点击,也可以是拖拽,但这些只是过程,而我们的真正目的是想获得结果,也就是...

Java中 高级的异常处理(java中异常处理的两种方式)

介绍异常处理是软件开发的一个关键方面,尤其是在Java中,这种语言以其稳健性和平台独立性而闻名。正确的异常处理不仅可以防止应用程序崩溃,还有助于调试并向用户提供有意义的反馈。...

【性能调优】全方位教你定位慢SQL,方法介绍下!

1.使用数据库自带工具...

全面了解mysql锁机制(InnoDB)与问题排查

MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别表级锁:开销小,加锁快;不会出现死锁;锁定粒度...

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获...