ELK Docker搭建,ELK作用,占用大小,elasticsearch,kibana,ik分词器,elasticsearch-head,logstash,Springboot整合log4j2

ELK

ELK

ELK是一组开源软件的首字母缩写,代表了Elasticsearch、Logstash和Kibana。它们都是由Elastic公司开发和维护的工具,通常结合使用来实现日志管理和分析。

  • Elasticsearch:是一个基于Lucene的分布式搜索和分析引擎。它可以快速地存储、搜索和分析大量的数据,包括结构化、非结构化和时间序列数据。Elasticsearch提供了强大的全文搜索、聚合分析、实时监控等功能。
  • Logstash:是一个用于数据收集、处理和转发的开源工具。它可以从各种来源(如日志文件、消息队列、数据库等)收集数据,并进行过滤、解析和转换,然后将数据发送到各种目标(如Elasticsearch、文件存储等)。Logstash支持多种插件和过滤器,可以根据需求对数据进行定制化处理。
  • Kibana:是一个用于数据可视化和分析的开源工具。它提供了直观的Web界面,可以通过图表、表格、地图等形式展示Elasticsearch中的数据。Kibana还支持查询和过滤数据,并提供强大的搜索和分析功能,帮助用户快速洞察数据。

ELK组合被广泛应用于日志管理、系统监控、安全分析等领域。通过Elasticsearch的强大搜索和分析能力、Logstash的数据收集和处理能力以及Kibana的直观可视化界面,ELK可以帮助用户更好地理解和利用海量数据。

Elasticsearch

Elasticsearch 是一个开源的分布式搜索和分析引擎,主要用于以下几个方面:

  1. 文本搜索:Elasticsearch 提供了强大的全文搜索功能,能够快速高效地对大规模的文本数据进行搜索。它支持复杂的查询、分词和语义分析,可以帮助用户在海量文本数据中快速找到所需的信息。
  2. 数据分析:Elasticsearch 支持丰富的聚合功能,可以对数据进行多维度的统计和分析。用户可以使用 Elasticsearch 进行数据的汇总、统计、分组和计算,帮助他们从海量数据中发现有用的信息和趋势。
  3. 实时数据处理:Elasticsearch 具有实时索引和搜索的能力,可以在数据写入后立即对其进行索引和搜索。这使得 Elasticsearch 成为处理实时数据流和日志数据的理想选择,例如应用日志、监控数据等。
  4. 全文检索:Elasticsearch 不仅支持基于关键字的搜索,还支持全文检索,包括模糊匹配、近义词匹配、拼写纠正等功能。这使得用户可以更加灵活地进行文本数据的检索和匹配。
  5. 分布式存储和搜索: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 中使用的主要组件如下:

  1. 查询(Query):用于搜索和过滤文档的条件。常见的查询类型包括匹配查询(match)、范围查询(range)、布尔查询(bool)等。
  2. 过滤(Filter):用于对搜索结果进行筛选和过滤。过滤器可以根据特定条件排除或保留文档。
  3. 聚合(Aggregation):用于对数据进行统计和分析。聚合可以计算总和、平均值、最大值、最小值等统计指标,并生成结果集。
  4. 排序(Sorting):用于按特定字段对搜索结果进行排序。
  5. 分页(Pagination):用于分页获取搜索结果。
  6. 脚本(Script):用于在查询和聚合操作中执行自定义脚本逻辑。

DSL 的优势在于它提供了一种清晰、结构化的语法,使得用户可以更直观地构建复杂的查询和分析操作。通过灵活组合不同的查询类型和操作,DSL 可以满足各种搜索和分析需求,并提供高效的性能和精确度。

请注意,DSL 是 Elasticsearch 的一部分,用于构建查询和聚合操作的语言,与其他编程语言或查询语言略有不同。在使用 Elasticsearch 的 DSL 时,您需要熟悉其语法和功能,以便有效地利用 Elasticsearch 进行数据搜索和分析。

Hadoop

Hadoop 是一个开源的分布式存储和计算框架,专门用于存储和处理大数据。

Hadoop 主要包括以下两个核心组件:

  1. Hadoop 分布式文件系统(HDFS):HDFS 是 Hadoop 的文件系统,用于存储大规模数据,并且能够在集群中进行高效的分布式存储和访问。HDFS 的设计目标是在廉价的硬件上提供高容错性。
  2. Hadoop 分布式计算框架(MapReduce):MapReduce 是 Hadoop 的分布式计算框架,用于实现分布式并行计算。它能够将数据分解成小块并在集群中并行处理,然后将结果合并起来,从而能够高效地处理大规模数据。

除了 HDFS 和 MapReduce 之外,Hadoop 生态系统还包括了许多其他的项目和工具,例如 YARN(资源调度与管理)、Hive(数据仓库)、Pig(数据流编程)、HBase(分布式数据库)、Spark(内存计算框架)等。这些工具和项目使得 Hadoop 成为一个功能强大、灵活多样的大数据处理平台。

总的来说,大数据是指规模庞大的数据集合,而 Hadoop 则是针对大数据存储和处理而设计的分布式存储和计算框架,它能够帮助用户高效地存储、处理和分析大规模的数据。

HBase

HBase 是 Hadoop 生态系统中的一个分布式、可伸缩、面向列的 NoSQL 数据库,它建立在 Hadoop HDFS 上,并利用 Hadoop 的分布式计算能力。

HBase 的设计目标是提供高性能、高可靠性的数据存储和实时查询能力,适合存储大规模的结构化或半结构化数据。它的主要特点包括:

  1. 列式存储:HBase 将数据按列存储,而不是按行存储,这种存储方式有助于高效地进行读取和查询。
  2. 分布式存储和计算:HBase 使用 Hadoop HDFS 作为底层的分布式文件系统,数据被分布存储在集群中的多台机器上,同时使用 Hadoop MapReduce 进行并行计算。
  3. 高可靠性:HBase 提供数据的冗余备份机制,数据会自动分布在多个节点上,并且能够容忍节点故障。
  4. 强一致性:HBase 提供强一致性的读写操作,可以保证数据的一致性和完整性。
  5. 快速查询: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] -&#45;&#45; %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.ymlpipeline/logstash.yml文件里面elasticsearchhostsIP地址改为主机的真实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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值