ELK单机版部署踩坑及与Springboot整合

部署ELK单机版,要将所有的Springboot业务应用的日志对接ELK。记录下详细的部署过程,以及一个问题的排查记录。

这张图比较好的反映出了三个组件之间的关系,下面的配置过程也是配这些组件两两的关系。

部署环境

服务器:CentOS7.8,4核32GB,IP:192.188.1.246

elk三个软件版本要一致:

elasticsearch:elasticsearch-7.9.3-x86_64.rpm

下载地址

logstash:kibana-7.9.3-x86_64.rpm

下载地址

kibina:kibana-7.9.3-x86_64.rpm

下载地址

部署流程

(1)关闭selinux,设置主机名

root用户登录,关闭防火墙
# hostnamectl set-hostname elk-server

(2)安装JDK,elasticsearch ,logstash,kibana
# yum -y install java-1.8.0-openjdk*
# yum -y install elasticsearch-7.9.3-x86_64.rpm
# yum -y install kibana-7.9.3-x86_64.rpm
# yum -y install logstash-7.9.3-x86_64.rpm

(3)修改elasticsearch配置文件

vi /etc/elasticsearch/elasticsearch.yml

cluster.name: elk-server  (集群名字,ELK单机版可以随便取)
node.name: elk-server   (ELK本机主机名)
path.data: /home/elk/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.188.1.246  (ELK本机IP)
http.port: 9200
discovery.seed_hosts: ["elk-server"]   (ELK本机主机名)
cluster.initial_master_nodes: ["192.188.1.246"]  (ELK本机IP)

(3)配置路径及用户

# mkdir -p /home/elk/elasticsearch

# chown -R elasticsearch:elasticsearch /home/elk/elasticsearch

(5)启动elasticsearch
# systemctl start elasticsearch
# systemctl enable elasticsearch
# systemctl status elasticsearch


(6)修改logstash配置文件
# vim /etc/logstash/logstash.yml

node.name: elk-server   (ELK本机主机名)
path.data: /home/elk/logstash  (logstash数据存储路径)
pipeline.ordered: auto
path.config: /etc/logstash/conf.d (配置文件路径)
log.level: info
path.logs: /var/log/logstash
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["http://192.188.1.246:9200"]

(7)修改kibana配置文件
# vim /etc/kibana/kibana.yml

server.port: 5601
server.host: "192.188.1.246"
server.name: "elk-server"
elasticsearch.hosts: ["http://192.188.1.246:9200"]  (kibana连接elasticsearch的地址)
kibana.index: ".kibana"
i18n.locale: "zh-CN"

(8)设置logstash的输入输出

# vim /etc/logstash/conf.d/apps.conf (文件名可任意)

#输入在5044端口侦听TCP连接
input{
  tcp {
    host => "192.188.1.246"
    port => 5044
    codec => json_lines
  }
}
#输出到es中
output{
  elasticsearch{
    hosts => ["192.188.1.246:9200"]
    index => "applog"
  }
}

(9)启动kibana和logstash
[root@elk-log-server ~]# systemctl start kibana
[root@elk-log-server ~]# systemctl enable kibana
[root@elk-log-server ~]# systemctl status kibana
[root@elk-log-server ~]# systemctl start logstash
[root@elk-log-server ~]# systemctl enable logstash
[root@elk-log-server ~]# systemctl status logstash

elk单机环境搭建完成,可用浏览器访问:http://1192.188.1.246:5601

这时候,ES中还没有任何数据,添加不了索引模式。

 与Springboot整合

pom文件:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.3</version>
</dependency>

resources/logback-spring.xml文件中添加logstash的配置

<?xml version="1.0" encoding="UTF-8"?>
<!--debug: 默认值:false 要不要打印 logback内部日志信息,true则表示要打印。建议开启 -->
<!--scan: 默认值:true 配置发送改变时,要不要重新加载-->
<!--scanPeriod: 默认值:1 seconds 检测配置发生变化的时间间隔。如果没给出时间单位,默认时间单位是毫秒-->
<configuration debug="false" scan="true" scanPeriod="10 seconds">

    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <springProperty scope="context" name="file_basePath" source="logging.file_basePath" defaultValue="./logs"/>
    <springProperty scope="context" name="file_prefix" source="logging.file_prefix" defaultValue="application"/>

    <!-- 按照每天生成日志文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 基本日志输出文件(当该文件达到“日记大小设置的值”则将内容“剪切”到<fileNamePattern>设定的文件中,不配置则直接将内容放到<fileNamePattern>设定的文件中) -->
        <!-- <file>${file_basePath}/${file_prefix}.log</file> -->

        <!-- 追加日志到原文件结尾 -->
        <append>true</append>
        <!-- timebasedrollingpolicy:演示时间和大小为基础的日志文件归档 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${file_basePath}/${file_prefix}/${file_prefix}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 控制归档文件的最大数量的保存,删除旧的文件,默认单位天数 -->
            <maxHistory>30</maxHistory>
            <!-- 设置当前日志的文件的大小,决定日志翻滚 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日记大小设置: KB.MB等 -->
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- encoders 作用是将logger事件转换成字节数组,并将字节数组写入到输出流-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!--logstash配置-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.188.1.246:5044</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "logLevel": "%level",
                        "serviceName": "${springAppName:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
        <!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>-->
    </appender>

    <!-- 日记数据使用的<appender> -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="file" />
        <appender-ref ref="LOGSTASH" />
    </root>
</configuration>

踩坑

程序中打上几个log.info(),发送一些日志,再到网页上添加索引,还是没有数据。

打开http://192.188.1.246:9200/,有东西,表示es正常,

打开http://192.188.1.246:9200/_cat/indices?v

 没有logstash配置文件/etc/logstash/conf.d/apps.conf里面,配置的applog这个索引。

再打开logstash的日志/var/log/logstash,目录下的logstash-plain.log文件

 提示,/home/elk/logstash没有写入权限,尝试改变读写权限

chown -R logstash:logstash/home/elk/logstash

 再发送几个日志,此时可在kibana页面中添加索引模式

在Discovery页面可以看到日志了

 可以通了,后面就是详细的日志查看页面的配置了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以很容易地集成ElasticSearch作为日志存储,然后使用Logstash将日志从Spring Boot应用程序传输到ElasticSearch,最后可以使用Kibana进行数据可视化。 以下是实现Spring Boot整合ELK的基本步骤: 1. 安装ElasticSearch,Logstash和Kibana。 2. 当Spring Boot应用程序运行时,将日志记录到文件中。 3. 使用Logstash配置文件来监控日志文件,并将数据发送到ElasticSearch。 4. 在Kibana中创建一个索引模式来解析ElasticSearch中的数据。 5. 创建仪表板和可视化,以显示日志数据。 下面是一个简单的Logstash配置文件,将日志文件发送到ElasticSearch: ``` input { file { path => "/path/to/spring-boot-app.log" sincedb_path => "/dev/null" start_position => "beginning" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} \[%{DATA:thread}\] %{DATA:class} - %{GREEDYDATA:logmessage}" } } } output { elasticsearch { hosts => [ "localhost:9200" ] index => "spring-boot-app-logs-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } ``` 这个配置文件使用Grok来解析日志文件中的日志条目,并将其发送到ElasticSearch中的名为“spring-boot-app-logs”索引的索引中。stdout输出是可选的,它允许将数据输出到控制台进行调试。 在使用Logstash转发日志数据之前,确保运行ElasticSearch和Kibana,并且ElasticSearch集群和索引模式已经设置好。在Kibana中,您可以通过“索引模式”页面创建新的索引模式。在这个页面上,您需要指定ElasticSearch索引的名称模式,并为每个字段定义Type。 创建模式后,您可以使用可视化编辑器创建仪表板和可视化,以显示日志数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值