部署ELK6.0+logback实现日志存储

之前的日志文件一直是保存在项目目录下,虽然做了一天一个日志文件的处理,但是查看和管理日志还不是很方便,以此契机引入了ELK,此次将ELK单独部署在一个单独的服务器。其他服务会通过logback将日志写入这个服务器

1、ELK简介

ELK是Elasticsearch+Logstash+Kibana的简称

  • ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写

  • Logstash是一个收集,处理和转发事件和日志消息的工具

  • Kibana是Elasticsearch的开源数据可视化插件,为查看存储在ElasticSearch提供了友好的Web界面,并提供了条形图,线条和散点图,饼图和地图等分析工具

总的来说,ElasticSearch负责存储数据,Logstash负责收集日志,并将日志格式化后写入ElasticSearch,Kibana提供可视化访问ElasticSearch数据的功能。


准备工作:

1、一台服务器   我使用的是CentOS

2、

Elasticsearch 6.0.0
Logstash 6.0.0
Kibana 6.0.0
   
JDK 1.8

3、在服务器上安装jdk

由于Elasticsearch、Logstash、Kibana均不能以root账号运行。所以要创建一个ELK专用账户

useradd elk
  • 创建ELK相关目录并赋权
#创建ELK APP目录
mkdir /usr/elk
#创建ELK 数据目录
mkdir /elk

#更改目录Owner
chown -R elk:elk /usr/elk
chown -R elk:elk /elk

#打开文件夹
cd /home/download

#下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz

#解压
tar -zvxf elasticsearch-6.0.0.tar.gz
tar -zvxf logstash-6.0.0.tar.gz
tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
部署Elasticsearch

  • 移动Elasticsearch到统一目录
#移动目录
mv /home/download/elasticsearch-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/elasticsearch-6.0.0/
  • 开放端口
#增加端口
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent

#重新加载防火墙规则
firewall-cmd --reload

注意如果防火墙关闭了需要先打开防火墙

注意下方的启动命令,如果需要在后台运行可使用& ,比如 ./bin/elasticsearch & 就是在后台启动,返回一个PID

,但是对于logstash,遇到关闭xshell后就停止的情况,需要使用nohup,即-->

nohup ./bin/logstash -f config/input-output.conf &

  • 切换账号
#账号切换到 elk
su - elk
  • 数据&日志目录
创建Elasticsearch主目录
mkdir /elk/es
#创建Elasticsearch数据目录
mkdir /elk/es/data
#创建Elasticsearch日志目录
mkdir /elk/es/logs
  • 启动
#进入elasticsearch根目录
cd /usr/elk/elasticsearch-6.0.0
#启动
./bin/elasticsearch


  • 查看健康状态
curl http://服务器IP地址:9200/_cluster/health

如果返回status=green表示正常

{
  "cluster_name": "esc",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 0,
  "active_shards": 0,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100.0
}


Logstash 配置

  • 移动Logstash到统一目录
#移动目录
mv /home/download/logstash-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/logstash-6.0.0/
  • 切换账号
#账号切换到 elk
su - elk
  • 数据&日志目录
#创建Logstash主目录
mkdir /elk/logstash
#创建Logstash数据目录
mkdir /elk/logstash/data
#创建Logstash日志目录
mkdir /elk/logstash/logs
  • 配置数据&日志目录
#打开目录
cd /usr/elk/logstash-6.0.0
#修改配置
vi config/logstash.yml

#增加以下内容
path.data: /elk/logstash/data
path.logs: /elk/logstash/logs
 
#增加端口
firewall-cmd --add-port=4567/tcp --permanent

#重新加载防火墙规则
firewall-cmd --reload
  • 配置Redis&Elasticsearch
vi config/input-output.conf

#配置内容

# 4567 接收日志端口

input {
  tcp {
        port => 4567        codec => "json"
        }
}


filter {
}


output {
  elasticsearch {


    hosts => ["127.0.0.1:9200"]
    index => "logstash-%{type}-%{+YYYY.MM.dd}"
    document_type => "%{type}"


 }
#下面表示将日志输出到控制台,注意如果是使用nuhop命令启动logstash,则会在当前路径下创建nulop.txt文件,#如果使用 stdout,则会将所有收集到的日志写入nulop.txt文件,造成一个几十G的文件产生且占用磁盘,因此要去掉
#  stdout {
#         codec => rubydebug
#         }
}

  • 启动
#进入Logstash根目录
cd /usr/elk/logstash-6.0.0
#启动
./bin/logstash -f config/input-output.conf

启动成功后,在启动输出的最后一行会看到如下信息:

[INFO ][logstash.pipeline        ] Pipeline started {"pipeline.id"=>"main"}
[INFO ][logstash.agent           ] Pipelines running {:count=>1, :pipelines=>["main"]}

注意配置文件别写错了,不然启不来的



Kibana 配置

  • 移动Kibana到统一目录
#移动目录
mv /home/download/kibana-6.0.0-linux-x86_64 /usr/elk/kibana-6.0.0
#赋权
chown -R elk:elk /usr/elk/kibana-6.0.0/
  • 开放端口
#增加端口
firewall-cmd --add-port=5601/tcp --permanent

#重新加载防火墙规则
firewall-cmd --reload
  • 切换账号
#账号切换到 elk
su - elk
  • 修改配置
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#修改配置
vi config/kibana.yml

#增加以下内容
server.port: 5601
server.host: "服务器IP地址"
elasticsearch.url: "http://127.0.0.1:9200"
注意 如果 kibana起不来 且报监听5601端口出错,在保证端口没有被占用的前提下,可将server.host设置为:server.host:"0.0.0.0"

  • 启动
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#启动
./bin/kibana
  • 访问

浏览器访问: 服务器IP地址:5601   会出现Kibana主页 

配置logback的配置文件


<!-- 写入远端logstash -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <param name="Encoding" value="UTF-8"/>
    <remoteHost>服务器IP地址</remoteHost>
    <port>4567</port>
    <!-- encoder is required -->
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>

别忘了将appdender加入root中

<root level="INFO">
    <appender-ref ref="logstash"/>
</root>

在POM文件中添加依赖

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.11</version>
</dependency>
<dependency>
    <groupId>net.logstash.log4j</groupId>
    <artifactId>jsonevent-layout</artifactId>
    <version>1.7</version>
</dependency>


参考文章:https://ken.io/note/elk-deploy-guide






































猜你喜欢

转载自blog.csdn.net/fuckluy/article/details/80430732