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中通过切换不同的命名空间进行快速的日志查询定位

相关推荐
NJCloud11 小时前
ELK企业级日志分析平台(四)——基于 ELFK + Kafka 的日志采集与传输平台部署实践
linux·运维·分布式·elk·kafka
lisanmengmeng11 小时前
搭建elk环境并接入frostmourne,实现监控报警效果(一)
运维·elk·jenkins
meilindehuzi_a1 天前
Express 基础到中间件:系统掌握常用 API 与请求处理链
中间件·express
En^_^Joy1 天前
Django中间件:请求拦截和响应(类似装饰器)
中间件·django·sqlite
艾伦_耶格宇1 天前
【ELK】-5 kibana和filebeat
linux·运维·ubuntu·elk
艾伦_耶格宇2 天前
【ELK】-4 logstash的搭建及操作
linux·运维·ubuntu·elk
lazy H2 天前
不同的消息队列有什么区别?Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ 选型对比
后端·中间件·kafka·rabbitmq·rocketmq
Lumistory4 天前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
小张同学a.6 天前
ELK企业级日志分析平台3——ES数据备份 & 集群监控 & ELFK+Kafka 架构部署
linux·运维·elk·elasticsearch·架构·kafka·filebeat
笨#小孩6 天前
中间件解析漏洞与编辑器漏洞:Web安全绕过的“捷径”
web安全·中间件·编辑器