分布式日志处理(ELK)

 

目录

一、分布式日志方案

二、Logstash的使用

1.安装配置  

​2.插件

三、ELK演示案例

1.启动ELK

2.配置LogStatsh

3.配置项目

4.kibana查看日志


一、分布式日志方案

ELKElasticsearchLogstashKibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack

Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。

Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。

Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。

通过上面对ELK简单的介绍,我们知道了ELK字面意义包含的每个开源框架的功能。市面上很多开发只要提到ELK能够一致说出它是一个日志分析架构技术栈总称,但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。并非唯一性。

 

二、Logstash的使用

1.安装配置  

下载 Download Logstash Free | Get Started Now | Elastic

可以使用资料中已下载好的压缩包,上传到服务器

解压

tar -xzf logstash-6.8.10.tar.gz

进入到logstash目录

执行下面的命令

bin/logstash -e 'input { stdin { } } output { stdout {} }'

这里是从控制台输入,然后输出到控制台,启动成功后输入字符,可以看到输出

2.插件

案例:当向某个文件输入内容是,触发logstash。将新增的内容,传递到es中

logstash 支持多种输入及多种输出,可以从官网查看

输入插件:Input plugins | Logstash Reference [8.4] | Elastic

输出插件:Output plugins | Logstash Reference [8.4] | Elastic

典型的应用场景,从各个应用的日志中收集数据,发送到ElasticSearch,那么可以使用File input pluginElasticsearch output plugin

输入插件  

先来配置File input plugin

在服务器上新建一个日志目录 /opt/app/logs

mkdir -p /opt/app/logs
# 进入日志目录
cd /opt/app/logs
# 新建一个日志文件
touch 1.log

接下来配置Elasticsearch output plugin

修改上面的配置文件  

input {
  file {
    # 插件编号,如果不指定,会自动生成一个,主要用于监控时区分
    id => "my_file_plugin_1"
    # 监控的文件路径,这里监控目录下的所有文件
    path => "/opt/app/logs/*"
  }
}
output{
    elasticsearch{
        # elasticsearch集群地址,多个地址以逗号分隔
        hosts=>["192.168.136.150:9200"]
        # 创建索引
        index=>"app-1-logs"
    }
}

//启动logstash
bin/logstash -f config/file.conf
//跳转log目录
cd /opt/app/logs
echo "hello world" >> 1.log

同样往1.log中发送日志,可以在ElasticSearch中查看

打开head插件

这里需要注意,如果出现下面的错误

一般是因为ES的存储空间不足,当磁盘的使用率超过95%时,Elasticsearch为了防止节点耗尽磁盘空间,自动将索引设置为只读模式。

更改elasticsearch.yml配置文件,在config/elasticsearch.yml中增加下面配置

# 禁用磁盘分配决策程序
cluster.routing.allocation.disk.threshold_enabled: false

重新启动ES即可,在生产环境一定要关注ES的磁盘使用率.

三、ELK演示案例

1.启动ELK

下载整合了ES Kibana LogStatsh的镜像

docker pull sebp/elk:771 

创建容器并启动

docker run -d --name elk -p 5601:5601 -p 9200:9200 -p 5044:5044  sebp/elk:771

端口说明

5601 - Kibana web 接口
9200 - Elasticsearch JSON 接口
5044 - Logstash 日志接收接口

查看启动日志

docker logs -f elk

可能出现的错误

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf 

添加下面配置:
vm.max_map_count=655360

并执行命令:
sysctl -p

然后,重新启动elk,即可启动成功。
docker start elk

输入: http://192.168.12.133:9200 查看下面画面代表es启动成功

 

输入: http://192.168.12.133:5601 查看下面画面代表kibana启动成功

 

2.配置LogStatsh

启动成功后 我们需要做下简单的配置,首先是LogStatsh的配置.

进入到容器中

docker exec -it -u root elk bash

编辑logStatsh的配置

vim /etc/logstash/conf.d/02-beats-input.conf

覆盖配置

input为输入的配置,output为输出的配置

input {
    tcp {
        port => 5044
        mode => "server"
        type => json
    }
} 
output{
    elasticsearch {
        hosts => ["localhost:9200"]
        action => "index"
        codec => rubydebug
        index => "log4j2-%{+YYYY.MM.dd}"
    }
}

修改完毕后exit退出,然后重启容器

docker restart elk

3.配置项目

项目中添加依赖  

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

添加日志配置文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF" monitorInterval="60">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
        <Socket name="Socket" host="192.168.136.160" port="5044" protocol="TCP">
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %M() @%L - %msg%n" />
        </Socket>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <root level="INFO">
            <appender-ref ref="Console"/>
            <appender-ref ref="Socket"/>
        </root>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"/>
        <logger name="org.mybatis" level="INFO"/>
    </loggers>
</configuration>

4.kibana查看日志

点击Management  

 

创建索引匹配格式: 2填写*即可

设置匹配格式log*

1下拉框选择@timestamp 以时间戳排序

创建后 在发现中心查看日志

 

1. 是需要显示的字段
2. 是可选过滤字段
3. 日志的显示区域

在启动另一个微服务 查看日志情况吧

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值