赞
踩
项目日志是记录项目运行过程中产生的事件和信息的重要工具,对于项目管理来说,监控项目日志的重要性体现在以下几个方面:
总之,监控项目日志是项目管理中一个重要的环节,在保证项目质量、提高项目效率、维护项目安全以及制定决策方面都有着关键的作用。
ELK是一个流行的日志管理和监控解决方案,它由三个主要组件组成:Elasticsearch、Logstash和Kibana。这三款组件都是elastic
旗下的产品。官网地址:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic
Elasticsearch
:是一个分布式搜索和分析引擎,将日志数据存储在分布式索引中,支持快速搜索、聚合和分析。Elasticsearch还提供了高可用性和可扩展性,支持水平扩展和负载平衡。Logstash
:是一个日志数据采集和转换工具,用于收集来自各种来源的数据,并将其转换为可用于Elasticsearch的标准格式。Logstash能够处理多种协议和格式,包括日志文件、数据库、平面文件等数据源,提供针对数据的过滤、清洗和变换操作。Kibana
:是可视化和展示工具,用于查询、分析和可视化存储在Elasticsearch中的数据。Kibana的用户界面简单直观,支持定制仪表板和图表,以及可视化分析和查询数据。总体来说,ELK是一个高度可扩展、快速、灵活的日志管理和监控系统,它使得搜集、处理、展现和掌握大量的日志数据变得简单化和直观化,方便用户对计算机系统中的问题进行监控和排错。
数据源产生日志,将日志传输到Logstash
。
Logstash
对日志进行过滤、解析和转换,将其标准化(通常为JSON数据格式)并发送给Elasticsearch
进行存储。
Elasticsearch
将数据存储在分布式索引中,支持快速搜索、聚合和分析。
Kibana
查询和分析分布式索引中的数据,并通过仪表板和可视化图表展示数据结果。
docker pull elasticsearch:7.17.3
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
// 任何远程机器都能访问es
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ 改变文件权限
docker run -d -p 9200:9200 -p 9300:9300 \
--restart=always \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--name elasticsearch elasticsearch:7.17.3
命令解释:
-e “discovery.type=single-node”:使es单节点运行
-e ES_JAVA_OPTS=“-Xms64m -Xmx512m”:设置es占用的内存
elasticsearch.yml
的挂载目录,添加以下内容http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
重启es容器并进入es容器
进入容器后执行以下命令
./bin/elasticsearch-setup-passwords interactive
依次输入密码
重启es容器
开放对应的端口(如果是与服务器同时也要开启安全组规则)
firewall-cmd --zone=public --add-port=9200/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --zone=public --query-port=9200/tcp
mkdir -p /mydata/kibana
cd /mydata/kibana
touch kibana.yml
server.port: 5601
#主机地址,可以是ip,主机名
server.host: 0.0.0.0
elasticsearch.hosts: ["http://elasticsearch的ip地址:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "es密码"
#汉化
i18n.locale: "zh-CN"
docker run -d -p 5601:5601 \
--restart=always \
-v /mydata/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--name kibana \
kibana:7.4.2
firewall-cmd --zone=public --add-port=5601/tcp --permanent
systemctl restart firewalld.service
docker pull logstash:7.17.3
/mydata/logstash
目录下创建logstash的配置文件logstash.conf
,写入以下配置:其中index
是索引的名称,我们使用“xha-”前缀加时间来生成每天的索引。input { stdin { } tcp { mode => "server" host => "0.0.0.0" port => 5044 codec => json_lines } } output { stdout { codec => rubydebug } elasticsearch { hosts => "elasticsearch的ip地址:9200" index => "xha-%{+YYYY.MM.dd}" user => "elastic" password => "z@jTs87!" } }
docker run -d --name logstash -p 5043:5043 -p 5044:5044 \
-e ES_JAVA_OPTS="-Xms125m -Xmx512m" \
--privileged=true \
--restart=always \
-v /mydata/logstash/logstash.yml:/usr/share/logstash/pipeline/logstash.yml \
logstash:7.17.3
docker exec -it logstash /bin/bash
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines
这里采用分布式微服务项目测试,分有多个模块,其中含有common
模块,common
模块作为公共模块在其他模块都有引入。
common
模块中添加logstash
和logback
依赖 <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.3</version>
</dependency>
common
模块的resources
目录下创建logback-spring.xml
文件,写入以下配置<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <include resource="org/springframework/boot/logging/logback/base.xml"/> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!--获取springboot的yml配置信息--> <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/> <springProperty scope="context" name="LOGSTASH_HOST" source="logstash.host" defaultValue="default"/> <springProperty scope="context" name="LOGSTASH_PORT" source="logstash.port" defaultValue="default"/> <springProperty scope="context" name="LOG_HOME" source="logstash.path" defaultValue="/mydata/logstash"/> <!--输出到控制台--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <withJansi>false</withJansi> <encoder> <!--<pattern>%d %p (%file:%line)- %m%n</pattern>--> <!--格式化输出:%d:表示日期 %thread:表示线程名 %-5level:级别从左显示5个字符宽度 %msg:日志消x`x`息 %n:是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n </pattern> <charset>UTF-8</charset> </encoder> </appender> <springProfile name="dev,test"> <!-- 日志发送至logstash --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${LOGSTASH_HOST:- }:${LOGSTASH_PORT:- }</destination> <!-- encoder is required --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <!-- 在elasticsearch的index中追加applicationName字段 --> <customFields>{"applicationName":"${applicationName}"}</customFields> </encoder> </appender> </springProfile> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder charset="UTF-8" class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <!-- 线上环境,日志配置 --> <springProfile name="prod"> <root level="INFO"> <appender-ref ref="LOGSTASH"/> </root> </springProfile> <!-- 本地、开发环境,日志配置 可以写logback支持的所有节点 --> <springProfile name="dev,test"> <root level="INFO"> <appender-ref ref="LOGSTASH"/> <appender-ref ref="console"/> </root> </springProfile> </configuration>
logstash
配置信息logstash:
host: logstash服务ip地址
port: 5043
# 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径
path: /mydata/logstash
Discover
,查看命中记录 选择可选字段进行过滤
保存为Search
在仪表板中进行添加
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。