ELK实时日记平台搭建与使用

ELK实时日记平台搭建与使用

  1. 什么是ELK
    ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称(但是后期出现的filebeat(beats中的一种)可以用来替代logstash的数据收集功能,比较轻量级)。市面上也被称为 Elastic Stack。

    Elasticsearch:是ElasticStack核心的分布式搜索和分析引擎,是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。
    Logstash:是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用Grok从非结构化数据中派生出结构,从IP地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

    filebeat:是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。

    kibana:一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。并且可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。还可以让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。

  2. 为什么使用ELK
    日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

  3. 怎么样使用ELK
    3.1 在docker上部署
    3.1.1 部署ELK
    学习文档:https://elk-docker.readthedocs.io/#usage
    (1)先决条件
    sysctl vm.max_map_count 需为 262144

vim /etc/sysctl.conf
vm.max_map_count = 262144

添加 vm.max_map_count = 262144,查看更改后结果

sysctl -p 

(2)在docker 拉取镜像

docker pull sebp/elk

(3)启动 elk

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

(3) 有配置文件的启动elk(我好像看错了文档了)
来源文档:
#开启三个端口传递信息,挂载主机的三个路径下的所有文件,给容器重命名为elk,镜像为sebp/elk
学习文档: https://blog.csdn.net/qq_40673345/article/details/103567305

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -v /opt/elk-data/conf:/opt/conf  -v /opt/elk-data/logs:/opt/logs  -v /opt/elk-data/elasticsearch-data:/var/lib/elasticsearch  -it -d --name elk sebp/elk

5601(Kibana 网络界面)。
9200(Elasticsearch JSON 接口)。
5044(Logstash Beats 接口,从 Beats 接收日志,例如 Filebeat)。
关闭 ^C
启动 docker start elk
关闭 docker stop elk

3.2 在linux上部署
学习文档:https://www.cnblogs.com/zsql/p/13164414.html
安装logstash、kibana、elasticseach
配置logstash的配置文件,并启动

# vim logstash.conf  #创建文件
# 文件内容
input {
  tcp {
    host => "xxx.xxx.xxx.xxx"
    port => 5604 #logstash的端口号
    mode => "server"
    tags => ["tags"]
    codec => plain{charset=>"UTF-8"}
    }
}
filter {
    ruby{
     code => "event['readunixtime']= event.timestamp.time.getlocal.to_f.to_s"
     add_field =>{
        "app_name"=>"ceshi" # 索引名
        "app_stage"=>"dev"
        "readtimestamp"=>"%{@timestamp}"
        }
     }
}
# output { stdout { codec => rubydebug } }
output {
    elasticsearch {
      hosts => ["xxx.xxx.xxx.xxx:9200"] #es的端口号
      index => "ceshi" # 索引名
  }
}
#启动logstash
./bin/logstash -f logstash.conf

3.3 使用ELK
学习文档 https://blog.csdn.net/qq_34988304/article/details/100058049
(1)引入依赖

<!--logback日志-->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.2</version>
</dependency>

(2)配置 logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
    <!-- 定义参数 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!-- 控制台打印设置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- logstash设置 -->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <param name="Encoding" value="UTF-8"/>
        <!-- logstash服务器ip -->
        <remoteHost>192.168.160.4</remoteHost>
        <!-- logstash tcp 端口-->
        <port>5044</port>
        <!-- <filter class="com.program.interceptor.ELKFilter"/>--> //引入过滤类
        <!-- encoder is required -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
            <customFields>{"appname":"ceshi"}</customFields> //索引名
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="consoleAppender" />
        <appender-ref ref="logstash"/>
    </root>
</configuration>

(3)直接使用注解@Slf4j的log.info();
(4)在kibana上添加索引,就可以看到服务的日志。在这里插入图片描述

  1. logstash 自动重新加载配置
    学习文档:https://blog.csdn.net/weixin_34032792/article/details/86259176
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值