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 小时前
金碟中间件-AAS-V10.0安装
中间件
Lspecialnx_11 小时前
文件解析漏洞中间件(iis和Apache)
网络安全·中间件
隔着天花板看星星11 小时前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
幽弥千月1 天前
【ELK】ES单节点升级为集群并开启https【亲测可用】
elk·elasticsearch·https
IT猿手1 天前
基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码
算法·elk·机器学习·matlab·无人机·聚类·强化学习
Autumn.h1 天前
文件解析漏洞
web安全·网络安全·中间件
武汉联从信息2 天前
Oracle 中间件 Webcenter Portal服务器环境搭建
中间件
流穿2 天前
ELK系列-(六)Redis也能作为消息队列?(下)
数据库·redis·ubuntu·elk·docker·容器
流穿2 天前
ELK系列-(五)指标收集-MetricBeat(下)
linux·运维·ubuntu·elk·docker·容器
小屁不止是运维3 天前
麒麟操作系统服务架构保姆级教程(三)NGINX中间件
linux·运维·服务器·nginx·中间件·架构