ELK
ELK
ELK是一组开源软件的首字母缩写,代表了Elasticsearch、Logstash和Kibana。它们都是由Elastic公司开发和维护的工具,通常结合使用来实现日志管理和分析。
- Elasticsearch:是一个基于Lucene的分布式搜索和分析引擎。它可以快速地存储、搜索和分析大量的数据,包括结构化、非结构化和时间序列数据。Elasticsearch提供了强大的全文搜索、聚合分析、实时监控等功能。
- Logstash:是一个用于数据收集、处理和转发的开源工具。它可以从各种来源(如日志文件、消息队列、数据库等)收集数据,并进行过滤、解析和转换,然后将数据发送到各种目标(如Elasticsearch、文件存储等)。Logstash支持多种插件和过滤器,可以根据需求对数据进行定制化处理。
- Kibana:是一个用于数据可视化和分析的开源工具。它提供了直观的Web界面,可以通过图表、表格、地图等形式展示Elasticsearch中的数据。Kibana还支持查询和过滤数据,并提供强大的搜索和分析功能,帮助用户快速洞察数据。
ELK组合被广泛应用于日志管理、系统监控、安全分析等领域。通过Elasticsearch的强大搜索和分析能力、Logstash的数据收集和处理能力以及Kibana的直观可视化界面,ELK可以帮助用户更好地理解和利用海量数据。
Elasticsearch
Elasticsearch 是一个开源的分布式搜索和分析引擎,主要用于以下几个方面:
- 文本搜索:Elasticsearch 提供了强大的全文搜索功能,能够快速高效地对大规模的文本数据进行搜索。它支持复杂的查询、分词和语义分析,可以帮助用户在海量文本数据中快速找到所需的信息。
- 数据分析:Elasticsearch 支持丰富的聚合功能,可以对数据进行多维度的统计和分析。用户可以使用 Elasticsearch 进行数据的汇总、统计、分组和计算,帮助他们从海量数据中发现有用的信息和趋势。
- 实时数据处理:Elasticsearch 具有实时索引和搜索的能力,可以在数据写入后立即对其进行索引和搜索。这使得 Elasticsearch 成为处理实时数据流和日志数据的理想选择,例如应用日志、监控数据等。
- 全文检索:Elasticsearch 不仅支持基于关键字的搜索,还支持全文检索,包括模糊匹配、近义词匹配、拼写纠正等功能。这使得用户可以更加灵活地进行文本数据的检索和匹配。
- 分布式存储和搜索:Elasticsearch 是一个分布式系统,能够自动管理数据的分片和复制,保证数据的可靠性和高可用性。它还提供了分布式搜索和聚合的功能,能够有效处理大规模的数据。
总的来说,Elasticsearch 主要用途包括但不限于文本搜索、数据分析、实时数据处理和全文检索。它被广泛应用于各种场景,包括企业搜索、日志分析、监控系统、电子商务平台等,为用户提供快速、可靠的数据搜索和分析能力。
本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
- 1PB(Petabyte 千万亿字节 拍字节)=1024TB
- 1048576GB
- 1TB=1024G
elasticsearch head
-
是一款开源的可视化的elasticsearch可视化工具,使用相当方便和广泛。
-
http://192.168.70.127:9100/
- 会显示:概览,索引,数据浏览,基本查询,符合查询
es创建index
- http://192.168.70.127:9200/hello2
- put json请求,参数如下
http://192.168.70.127:9200/hello
{
"mappings": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "text",
"analyzer": "standard"
},
"content": {
"type": "text",
"analyzer": "standard"
}
}
}
}
ELK版本和Docker大小
logstash 7.2.0 4470777ac65e 4 years ago 836MB
kibana 7.2.0 3e581a516dcd 4 years ago 890MB
elasticsearch 7.2.0 0efa6a3de177 4 years ago 861MB
mobz/elasticsearch-head 5 b19a5c98e43b 6 years ago 824MB
redis latest e40e2763392d 3 weeks ago 138MB
mysql 8 412b8cc72e4a 8 months ago 531MB
kibana 8.11.3 bb428a138a34 13 days ago 1.03GB
logstash 8.11.3 a97f65931a6d 13 days ago 770MB
elasticsearch 8.11.3 ac1eef415132 13 days ago 1.41GB
通过官方给的 Docker仓库 https://hub.docker.com/(需要外网)
docker pull elasticsearch:8.11.3
docker pull kibana:8.11.3
docker pull logstash:8.11.3
elasticsearch ,kibana, logstash 最新的Docker版本(都一样)
8.11.3
8.11.2
7.17.16
* DLS
搜索匹配指定关键字的文档
GET /my_index/_search
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
精确匹配指定字段的值
GET /my_index/_search
{
"query": {
"term": {
"category": "books"
}
}
}
匹配指定范围内的值
GET /my_index/_search
{
"query": {
"range": {
"price": {
"gte": 10,
"lte": 50
}
}
}
}
DSL(Domain Specific Language)是专用领域语言的缩写,它是一种为特定领域或问题而设计的编程语言。在 Elasticsearch 中,DSL 是一种用于构建查询和聚合操作的特定语法。
Elasticsearch 的 DSL 具有清晰的结构和丰富的功能,可以通过 JSON 格式的查询语句来进行索引的搜索和分析。DSL 提供了多种查询类型和聚合操作,可以帮助用户灵活地构建复杂的查询和分析逻辑。
DSL 在 Elasticsearch 中使用的主要组件如下:
- 查询(Query):用于搜索和过滤文档的条件。常见的查询类型包括匹配查询(match)、范围查询(range)、布尔查询(bool)等。
- 过滤(Filter):用于对搜索结果进行筛选和过滤。过滤器可以根据特定条件排除或保留文档。
- 聚合(Aggregation):用于对数据进行统计和分析。聚合可以计算总和、平均值、最大值、最小值等统计指标,并生成结果集。
- 排序(Sorting):用于按特定字段对搜索结果进行排序。
- 分页(Pagination):用于分页获取搜索结果。
- 脚本(Script):用于在查询和聚合操作中执行自定义脚本逻辑。
DSL 的优势在于它提供了一种清晰、结构化的语法,使得用户可以更直观地构建复杂的查询和分析操作。通过灵活组合不同的查询类型和操作,DSL 可以满足各种搜索和分析需求,并提供高效的性能和精确度。
请注意,DSL 是 Elasticsearch 的一部分,用于构建查询和聚合操作的语言,与其他编程语言或查询语言略有不同。在使用 Elasticsearch 的 DSL 时,您需要熟悉其语法和功能,以便有效地利用 Elasticsearch 进行数据搜索和分析。
Hadoop
Hadoop 是一个开源的分布式存储和计算框架,专门用于存储和处理大数据。
Hadoop 主要包括以下两个核心组件:
- Hadoop 分布式文件系统(HDFS):HDFS 是 Hadoop 的文件系统,用于存储大规模数据,并且能够在集群中进行高效的分布式存储和访问。HDFS 的设计目标是在廉价的硬件上提供高容错性。
- Hadoop 分布式计算框架(MapReduce):MapReduce 是 Hadoop 的分布式计算框架,用于实现分布式并行计算。它能够将数据分解成小块并在集群中并行处理,然后将结果合并起来,从而能够高效地处理大规模数据。
除了 HDFS 和 MapReduce 之外,Hadoop 生态系统还包括了许多其他的项目和工具,例如 YARN(资源调度与管理)、Hive(数据仓库)、Pig(数据流编程)、HBase(分布式数据库)、Spark(内存计算框架)等。这些工具和项目使得 Hadoop 成为一个功能强大、灵活多样的大数据处理平台。
总的来说,大数据是指规模庞大的数据集合,而 Hadoop 则是针对大数据存储和处理而设计的分布式存储和计算框架,它能够帮助用户高效地存储、处理和分析大规模的数据。
HBase
HBase 是 Hadoop 生态系统中的一个分布式、可伸缩、面向列的 NoSQL 数据库,它建立在 Hadoop HDFS 上,并利用 Hadoop 的分布式计算能力。
HBase 的设计目标是提供高性能、高可靠性的数据存储和实时查询能力,适合存储大规模的结构化或半结构化数据。它的主要特点包括:
- 列式存储:HBase 将数据按列存储,而不是按行存储,这种存储方式有助于高效地进行读取和查询。
- 分布式存储和计算:HBase 使用 Hadoop HDFS 作为底层的分布式文件系统,数据被分布存储在集群中的多台机器上,同时使用 Hadoop MapReduce 进行并行计算。
- 高可靠性:HBase 提供数据的冗余备份机制,数据会自动分布在多个节点上,并且能够容忍节点故障。
- 强一致性:HBase 提供强一致性的读写操作,可以保证数据的一致性和完整性。
- 快速查询:HBase 支持基于主键的随机读写操作,同时还提供了范围查询和过滤器等功能,支持实时查询和分析。
HBase 可以与其他大数据工具和组件集成使用,例如 Hive、Pig、Spark 等。它在大数据领域广泛应用于实时分析、数据存储和处理等场景,特别适合需要高吞吐量和低延迟的应用。
Docker部署ELK
如果已经搭建好,访问4个IP如下
http://192.168.70.127:9200/ #es主页
http://192.168.70.127:9200/_cat/indices?v #es index主页
http://192.168.70.127:9600/ #LogStash
http://192.168.70.127:5601/ #Kibana
http://192.168.70.127:9100/ #es-head
一、拉取镜像
docker pull elasticsearch:7.2.0
docker pull mobz/elasticsearch-head:5
docker pull kibana:7.2.0
docker pull logstash:7.2.0
二、 * 运行容器:9200 分布式搜索引擎
- 注意:9300是tcp通信端口,es集群之间使用tcp进行通信,9200是http协议端口。
docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0
docker run -d #后台运行容器
--restart=always #命令指示 Docker 在宿主机启动时自动重新启动容器,并且在容器退出时也自动重新启动。
--name es
-p 9200:9200 #-p (小写)映射端口号,主机端口:容器端口
-p 9300:9300
-e "discovery.type=single-node" #-e 指定启动容器时的环境变量
elasticsearch:7.2.0
三、 配置跨域
3.1 进入容器
docker exec -it es /bin/bash
3.2 进行配置
# 进入配置文件夹
cd config
# 修改配置文件
vi elasticsearch.yml
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
3.3 * 重启容器
docker restart es
3.4 访问 9200端
- http://192.168.70.127:9200/
{
"name" : "20ab9bd1d215",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "eV2JJWaLS920xKzrzUtrxw",
"version" : {
"number" : "7.2.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "508c38a",
"build_date" : "2019-06-20T15:54:18.811730Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
四、 * 运行 kibana 容器:5601 展示
docker run -d --restart=always --name kibana --link es:elasticsearch -p 5601:5601 kibana:7.2.0
4.1 * 设置中文 和 esde IP
# 进入容器
docker exec -it kibana /bin/bash
# 进入配置文件夹
cd config
# 修改配置文件
vi kibana.yml
# 修改elasticsearch连接(如果是本机部署,ip需填写内网ip)
elasticsearch.hosts: [ "http://elasticsearch的ip地址:端口号" ]
# 加入中文配置(保存后重启kibana)
i18n.locale: "zh-CN"
docker restart kibana
- 访问即可看到主页面:添加APM,添加日志数据,添加指标数据,添加安全事件
http://192.168.70.127:5601/
4.2 安装ik分词器
安装ik分词器,下载ik.zip(版本必须和elasticsearch相同
)
https://github.com/medcl/elasticsearch-analysis-ik/releases
# 下载ik分词器
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
# 解压后通过ftp上传到服务器下
# 将这个文件夹拷贝到elasticsearch中
#docker cp /home/silence/elk/ik es:/usr/share/elasticsearch/plugins
docker cp ./ik es:/usr/share/elasticsearch/plugins
#注意一定要自己新建 ik文件夹,然后解压。因为:elasticsearch-analysis-ik-7.2.0.zip,直接解压,会生成多个文件,不会创建文件夹
# 查看是否拷贝成功,进入elasticsearch/plugins/ik中:
docker exec -it es /bin/bash
cd /usr/share/elasticsearch/plugins
ls
cd ik
ls
# 重新启动elasticsearch容器
docker restart es
五、 * 运行 Head 容器:9100
docker run -d --restart=always --name es_head -p 9100:9100 mobz/elasticsearch-head:5
六、* 安装 LogStash :9600 收集
docker pull logstash:7.2.0
docker run -d --restart=always --name logstash -p 5044:5044 -p 9600:9600 logstash:7.2.0
6.1 进入容器
docker exec -it logstash /bin/bash
6.2 * 修改 config 下的 logstash.yml
主要修改 es 的地址(如果是本机部署,ip需填写内网ip):
vi config/logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch的ip:端口号" ]
# 保存退出
:wq
6.3 修改 pipeline 下的 logstash.conf
vi pipeline/logstash.conf
#注意不是这个文件 logstash.yml
#vi pipeline/logstash.yml
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
codec => json_lines # 数据格式
}
}
output {
elasticsearch {
hosts => ["http://192.168.70.127:9200"] # ElasticSearch 的地址和端口(如果是本机部署,ip需填写内网ip)
index => "elk" # 指定索引名
codec => "json"
}
stdout {
codec => rubydebug
}
}
# 保存退出
:wq
默认是这样的
input {
beats {
port => 5044
}
}
output {
stdout {
codec => rubydebug
}
}
6.4 查看日志
docker logs -f logstash
6.5 重新启动elasticsearch
docker restart logstash
[2023-12-26T04:34:38,103][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://192.168.70.127:9200"]}
[2023-12-26T04:34:38,128][INFO ][logstash.outputs.elasticsearch] Using default mapping template
6.6 查看es是否获取数据
http://192.168.70.127:9200/_cat/indices?v
6.7 * Kibana新建索引模式
设置——索引模式——创建索引模式——输入elk
http://192.168.70.127:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana_1 eHdfc0pvT1-M_xuuYCl8BA 1 0 5 0 32.1kb 32.1kb
green open .kibana_task_manager 3TrHVIPiQHSGn5LFeA8bkw 1 0 2 9 16.5kb 16.5kb
yellow open elk nAzMwFr4QH-XL19UExpSRQ 1 1 16 0 50.9kb 50.9kb
6.8 Kibana页面
七、Springboot通过log4j2+logstash整合日志
7.1 pom.xml
文件中增加log4j2相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions><!-- 去掉logback配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j2 相关版本最好选择最新版本-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
7.2 application-dev.yml
引入log4j2.xml日志配置文件
# log4j2日志配置文件
logging:
config: classpath:config/log4j2-dev.xml
7.3 * log4j2-dev.xml
文件配置
logstash两种连接方式:Socket连接
/Gelf连接
<!-- logstash Socket连接配置-->
<Socket name="logstash" host="logstash部署ip地址" port="logstash部署端口号" protocol="TCP">
<PatternLayout pattern="${PATTERN}" />
<!--<JsonLayout properties="true"/>-->
</Socket>
<!-- logstash Gelf连接配置-->
<!--<Gelf name="logstash-gelf" host="udp:logstash部署ip地址" port="logstash部署端口号" version="1.1" ignoreExceptions="true">
XXX
</Gelf>-->
<loggers>
<root level = "info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileError"/>
<!--<appender-ref ref="RollingFileWarn"/>-->
<!--<appender-ref ref="RollingFileDebug"/>-->
<!--<appender-ref ref="Filelog"/>-->
<!-- logstash 配置-->
<appender-ref ref="logstash" />
</root>
</loggers>
<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5">
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--变量配置-->
<Properties>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%p] [%c:%L] --- %m%n" />
<Property name="PATTERN">{"host": "%host", "logger": "%logger", "level": "%level", "message": "[%thread] [%c:%L] --- %message"}%n</Property>
<!-- 定义日志存储的路径,不要配置相对路径 -->
<property name="FILE_PATH" value="C:/springSecurity/" />
<property name="FILE_NAME" value="securitylog" />
</Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${LOG_PATTERN}"/>
<!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="Debug" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileDebug" fileName="${FILE_PATH}/debug.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- logstash Socket连接配置-->
<Socket name="logstash" host="logstash部署ip地址" port="logstash部署端口号" protocol="TCP">
<PatternLayout pattern="${PATTERN}" />
<!--<JsonLayout properties="true"/>-->
</Socket>
<!-- logstash Gelf连接配置-->
<!--<Gelf name="logstash-gelf" host="udp:logstash部署ip地址" port="logstash部署端口号" version="1.1" ignoreExceptions="true">
<Field name="timestamp" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}" />
<Field name="logger" pattern="%logger" />
<Field name="level" pattern="%level" />
<Field name="simpleClassName" pattern="%C{1}" />
<Field name="className" pattern="%C" />
<Field name="method" pattern="%M" />
<Field name="line" pattern="%L" />
<Field name="server" pattern="%host" />
</Gelf>-->
</appenders>
<!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
<!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.mybatis" level="info" additivity="false">
<AppenderRef ref="Console"/>
</logger>
<!--监控系统信息-->
<!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="com.security.persisence" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<appender-ref ref="RollingFileDebug"/>
</Logger>
<AsyncLogger name="com.security" level="info" includeLocation="false" >
<!--<appender-ref ref="Console"/>-->
<appender-ref ref="logstash" />
</AsyncLogger>
<root level = "info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileError"/>
<!--<appender-ref ref="RollingFileWarn"/>-->
<!--<appender-ref ref="RollingFileDebug"/>-->
<!--<appender-ref ref="Filelog"/>-->
<!-- logstash 配置-->
<appender-ref ref="logstash" />
</root>
</loggers>
</configuration>
八、IP问题以及解决方法
问题1:
Kibana 在config/kibana.yaml 中修改host ,把默认的 http://elasticsearch:9200
改为 http://localhost:9200
,启动报错,查看日志:
# docker logs 容器ID, 查看的日志信息:
# docker logs -tf es
2023-06-14 16:15:32 {"type":"log","@timestamp":"2023-06-14T08:15:32Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"No living connections"}
解决办法:
- 把kibana.yaml里面的host改为主机的真实IP(内网172网段ip)
问题2:
logstash 修改文件:config/logstash.yml、pipeline/logstash.yml文件时,把elasticsearch的hosts中的IP地址改为localhost/127.0.0.1时,启动报错,查看日志:
2023-06-14 16:01:53 [2023-06-14T08:01:53,270][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://127.0.0.1:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://127.0.0.1:9200/][Manticore::SocketException] Connection refused (Connection refused)"}
解决办法:
- 把
config/logstash.yml
、pipeline/logstash.yml
文件里面elasticsearch
的hosts
IP地址改为主机的真实IP(内网172网段ip)
docker IP查看
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container
其他:轻量级日志
filebeat
docker pull docker.elastic.co/beats/filebeat:7.2.0
docker run -d --restart=always --name filebeat docker.elastic.co/beats/filebeat:7.2.0
https://blog.csdn.net/qq_40406380/article/details/131226485