ELK--收集日志demo

ELK--收集日志demo

之前项目多实例部署的时候,由于请求被负载到任意节点,所以查看日志是开多个终端窗口。后来做了简单处理,将同一项目的多实例日志存入同一个文件,由于存在文件锁的竞争,日志内容混乱,性能差且效果也不好。后来使用tail 命令仅在查看日志文件时汇总显示(后来改为multitail)。一直想试试ELK来着,简单做了下集成的demo。

安装ELK

这里简单提一下:

  • logstash:收集日志数据
  • elasticsearch:存取日志数据
  • kibana:数据展示
    这里使用docker compose安装,简单方便。为了方便服务调用,我直接关掉了elasticsearch的安全设置
yml 复制代码
# 定义网络
networks:
  es-network:
    driver: bridge
# 定义数据卷
volumes:
  es-data:
  kibana-data:
# 定义服务
services:
  # es设置
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.2
    container_name: es01
    logging:
      driver: json-file
    ports:
      - "9200:9200"
    networks:
      - es-network
    volumes:
      - es-data:/usr/share/elasticsearch
    environment:
      - ELASTIC_PASSWORD=thisIsPWD # 自定义密码
      - xpack.security.enabled=false # 禁用安全设置
    deploy:
      resources:
        limits:
          memory: 1GB
  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.2
    container_name: kibana01
    logging:
      driver: json-file
    ports:
      - "5601:5601"
    networks:
      - es-network
    volumes:
      - kibana-data:/usr/share/kibana
    depends_on:
      - es01
    environment:
      - ELASTICSEARCH_HOSTS=http://es01:9200  # es host
      - ELASTICSEARCH_BASIC_AUTH_USER=elastic
      - ELASTICSEARCH_BASIC_AUTH_PASSWORD=thisIsPWD  # 密码
  logstash:
    image: docker.elastic.co/logstash/logstash:8.15.2
    container_name: logstash
    networks:
      - es-network
    ports:
      - "5044:5044"
    volumes:
      - /Users/mars/docker_data/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
      - /Users/mars/docker_data/logstash/pipeline/:/usr/share/logstash/pipeline/ #挂载管道配置
    depends_on:
      - es01

日志收集配置

compose配置文件中,logstash挂载了外部配置文件夹。

不用来源的数据可以单独定义一个管道配置来收集和处理日志数据。这里定义了两个测试用例,一个用来收集docker日志,一个用来收集Springboot日志

shell 复制代码
# docker-log.conf
input {
	file {
		path => "/var/lib/docker/containers/*/*.log"
		start_position => "end"
		sincedb_path => "/dev/null"
	}
}
output {
	elasticsearch {
		hosts => ["http://es01:9200"]
		index => "docker-logs-%{+YYYY.MM.dd}"
	}
}

# springboot-log.conf
input {
  tcp {
    port => 5044
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => ["http://es01:9200"]
    index => "springboot-logs-%{+YYYY.MM.dd}"
  }
}

启动容器

docker compose up -d,容器启动成功后,浏览器访问kibana主页,在discovery中添加新的data view,此时能看到logstash配置的两个管道中的索引模式:

  • docker-logs-%{+YYYY.MM.dd}
  • springboot-logs-%{+YYYY.MM.dd}
    分别创建对应的data view即可。

springboot配置

  1. 添加依赖
  2. 配置日志
xml 复制代码
<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>8.0</version>
</dependency>

<!-- 日志配置-->
<configuration>
	<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<destination>localhost:5044</destination><!-- logstash监听端口-->
		<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
			<providers>
				<timestamp />
				<logger />
				<threadName />
				<level />
				<message />
				<logstashMarkers />
				<arguments />
				<stackTrace />
			</providers>
		</encoder>
	</appender>

	<root level="INFO">
		<appender-ref ref="LOGSTASH" />
	</root>
</configuration>

测试

Springboot中调用接口,kibana中通过切换不同的命名空间进行快速的日志查询定位

相关推荐
许苑向上9 小时前
在Linux上部署(MySQL Redis Elasticsearch等)各类软件
linux·中间件·开源软件
网安_秋刀鱼9 小时前
中间件安全
安全·web安全·网络安全·中间件·1024程序员节
光仔December1 天前
【Elasticsearch入门到落地】1、初识Elasticsearch
大数据·elk·elasticsearch·搜索引擎·lucene
凡人的AI工具箱1 天前
15分钟学 Go 第 41 天:中间件的使用
开发语言·人工智能·后端·中间件·golang
太空眼睛2 天前
【EFK】Linux集群部署Elasticsearch最新版本8.x
linux·elk·elasticsearch·efk·master·8.15.3·node.roles
卷心菜是俺3 天前
分布式数据库中间件mycat
数据库·分布式·中间件
General_G3 天前
FastDDS服务发现之EDP的收发
linux·中间件·服务发现·fastdds
皮克斯的进化之路3 天前
RabbitMQ的应用
分布式·中间件·rabbitmq
苹果酱05674 天前
关于最新create-react-app使用react-app-rewired2.x添加webpack配置
java·开发语言·spring boot·后端·中间件
newxtc4 天前
【客观理性深入讨论国产中间件及数据库-科创基础软件】
数据库·中间件·国产数据库·国产中间件·科创