定制开发ELk日志分析系统搭建

一、什么是ELK
​ ELK是 + Logstash + Kibana 定制开发这种架构的简写.

二、ELK常见的
Elasticsearch + Logstash + Kibana
定制开发这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。定制开发这种架构虽然是官网介定制开发绍里的方式,定制开发但是往往在生产中很少使用。

Elasticsearch + Logstash + filebeat + Kibana
定制开发与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如rabbitmq(集群化)) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。

下面如何搭建:


1.es 搭建

1.Create a file called elasticsearch.repo in the /etc/yum.repos.d/

  1. [elasticsearch]
  2. name=Elasticsearch repository for 8.x packages
  3. baseurl=https://artifacts.elastic.co/packages/8.x/yum
  4. gpgcheck=1
  5. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  6. enabled=0
  7. autorefresh=1
  8. type=rpm-md

2.sudo yum install --enablerepo=elasticsearch elasticsearch

3.配置:vim /etc/elasticsearch/elasticsearch.yml  

  1. path.data: /data/elasticsearch
  2. #
  3. # Path to log files:
  4. #
  5. path.logs: /var/log/elasticsearch
  6. network.host: 0.0.0.0
  7. #
  8. # By default Elasticsearch listens for HTTP traffic on the first free port it
  9. # finds starting at 9200. Set a specific HTTP port here:
  10. #
  11. http.port: 9200
  12. xpack.security.enabled: false

4.修改同目录下:jvm.options 保证 -xms -xmx 保证是系统内存一半以下或者保证自己服务器合适大小

5.创建文件夹 并授权 如上的 pat.data=

   mkdir  /data/elasticsearch 

   chown -R elasticsearch:elasticsearch  /data/elasticsearch/

6.启动:

  1. sudo systemctl daemon-reload
  2. sudo systemctl enable elasticsearch.service
  3. sudo systemctl start elasticsearch.service

2.  下载logstash (rabbitmq 中间件安装跳过自己百度搜索)

        1.选择自己的操作系统下载 进行解压  

         2.修改配置文件  conf/logstash-sample.conf   

  1. # Sample Logstash configuration for creating a simple
  2. # Beats -> Logstash -> Elasticsearch pipeline.
  3. input {
  4. #对接 filebeat 我们使用java 链接不用这个
  5. beats {
  6. port => 5044
  7. }
  8. #对接 tcp
  9. tcp {
  10. mode => "server"
  11. host => "0.0.0.0"
  12. port => 4560
  13. codec => json_lines
  14. }
  15. #对接rocketmq
  16. rabbitmq {
  17. host=>"localhost"
  18. vhost => "/"
  19. port=> 5672
  20. user=>"guest"
  21. password=>"guest"
  22. queue=>"station_Route"
  23. durable=> true
  24. codec=>json
  25. }
  26. }
  27. output {
  28. elasticsearch {
  29. hosts => ["http://ip:9200"]
  30. index => "rabbitmq-%{+YYYY.MM.dd}"
  31. #user => "elastic"
  32. #password => "changeme"
  33. }
  34. }

   3. 启动  logstash -f logstash.conf

3.安装 kibana 

  1.解压完成修改配置文件 conf/kibana.yml

  1. i18n.locale: "zh-CN"
  2. elasticsearch.hosts: ["http://localhost:9200"]
  3. server.name: "test-kin"
  4. server.port: 5601
  5. # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
  6. # The default is 'localhost', which usually means remote machines will not be able to connect.
  7. # To allow connections from remote users, set this parameter to a non-loopback address.
  8. server.host: "0.0.0.0"

2.启动 

 nohup ./kibana --allow-root >/dev/null & 

3.注意防火墙  地址

4.Spring boot 项目整合

 1.添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. <version>2.5.5</version>
  5. </dependency>

2.配置yml 

  1. spring:
  2. application:
  3. name: test
  4. mvc:
  5. static-path-pattern: /**
  6. rabbitmq:
  7. host: localhost
  8. port: 5672
  9. username: guest
  10. password: guest

3.修改 logback-spring.xml 自定义一个logback拦截器 只有当使用Marker 再进行记录

  1. /**
  2. * @author chenkang
  3. * @date 2022/5/19 13:24
  4. */
  5. public class LogStashFilter extends Filter<ILoggingEvent> {
  6. public final static Marker LOGSTASH = MarkerFactory.getMarker("logstash");
  7. @Override
  8. public FilterReply decide(ILoggingEvent iLoggingEvent) {
  9. Marker marker = iLoggingEvent.getMarker();
  10. return Optional.ofNullable(marker).filter(m->m.equals(LOGSTASH)).map(m->FilterReply.ACCEPT).orElse(FilterReply.DENY);
  11. }
  12. }
  1. <springProperty name="rabbitmqHost" source="spring.rabbitmq.host"/>
  2. <springProperty name="rabbitmqPort" source="spring.rabbitmq.port"/>
  3. <springProperty name="rabbitmqUsername" source="spring.rabbitmq.username"/>
  4. <springProperty name="rabbitmqPassword" source="spring.rabbitmq.password"/>
  5. <appender name="AMQP" class="org.springframework.amqp.rabbit.logback.AmqpAppender">
  6. <!--Layout(纯文本)而不是格式化的JSON -->
  7. <filter class="com.chenkang.test.config.LogStashFilter" />
  8. <layout>
  9. <pattern>
  10. <![CDATA[%msg]]>
  11. </pattern>
  12. </layout>
  13. <host>${rabbitmqHost}</host>
  14. <port>${rabbitmqPort}</port>
  15. <username>${rabbitmqUsername}</username>
  16. <password>${rabbitmqPassword}</password>
  17. <declareExchange>false</declareExchange>
  18. <exchangeType>direct</exchangeType>
  19. <exchangeName>exchanges.route</exchangeName>
  20. <routingKeyPattern>route_exchange</routingKeyPattern>
  21. <generateId>true</generateId>
  22. <charset>UTF-8</charset>
  23. <durable>false</durable>
  24. <deliveryMode>NON_PERSISTENT</deliveryMode>
  25. </appender>

最后是测试:

  1. Message message = new Message();
  2. message.setDeviceCode("code123");
  3. message.setDeviceName("deviceName3345");
  4. message.setIndex("1024");
  5. log.info(LogStashFilter.LOGSTASH,JSON.toJSONString(message));
  6. log.info(JSON.toJSONString(message));

输出日志就会推送rabbitmq  订阅 然后  logstash 消费  存储到 es 

KIbana 查询数据 自己本地实测 每秒 1-2 千没啥问题 但是10000 时候就崩掉了 logstash 假死

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发