Springboot+elk实现分布式日志管理

java1234

共 5205字,需浏览 11分钟

 · 2020-11-08

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

  作者 |  CosmosNi

来源 |  urlify.cn/zINBvm

66套java从入门到精通实战课程分享

一:准备工作

1.准备三台机器:
10.2.0.151 主
10.2.0.152 数据中心
10.2.0.153 数据中心
机器上都安装上jdk

2.修改host文件

vim /etc/hosts
10.2.0.151 master-node
10.2.0.152 data-node1
10.2.0.153 data-node2

二:安装Elasticsearch 分布式集群

在三台机器上分别装上Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
rpm -ivh elasticsearch-6.0.0.rpm


2.搭建集群
2.1 修改主节点上的配置文件

vim /etc/elasticsearch/elasticsearch.yml

修改如下几个配置:
cluster.name: master-node # 集群中的名称
node.name: master # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false # 表示这不是数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: [“10.2.0.151”, “10.2.0.152”, “10.2.0.153”] # 配置自动发现

2.2复制替换此文件到两个数据中心

  10.2.0.152 下修改如下配置:
  node.name: data-node1
  node.master: false
  node.data: true

  10.2.0.153 下修改如下配置:
  node.name: data-node2
  node.master: false
  node.data: true

2.3启动es

systemctl start elasticsearch.service
ps aux |grep elasticsearch
netstat -lntp |grep java  # es服务会监听两个端口

2.4查看集群健康状态

curl '10.2.0.151:9200/_cluster/health?pretty'
{
  "cluster_name" : "master-node",
  "status" : "green",  # 为green则代表健康没问题,如果是yellow或者red则是集群有问题
  "timed_out" : false,  # 是否有超时
  "number_of_nodes" : 3, # 集群中的节点数量
  "number_of_data_nodes" : 2, # 集群中data节点的数量
  "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
}

集群的详细信息:

curl '192.168.77.128:9200/_cluster/state?pretty'

到此,集群安装成功

三:搭建kibana

1.安装

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-x86_64.rpm
rpm -ivh kibana-6.0.0-x86_64.rpm


2.配置

vim /etc/kibana/kibana.yml  # 增加以下内容

server.port: 5601  # 配置kibana的端口
server.host: 10.2.0.151  # 配置监听ip
elasticsearch.url: "http://10.2.0.151:9200"  # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip
logging.dest: /var/log/kibana.log  # 配置kibana的日志文件路径,不然默认是messages里记录日志


3.创建日志文件:

 touch /var/log/kibana.log; chmod 777 /var/log/kibana.log

4.启动

systemctl start kibana
ps aux |grep kibana   ###监听的端口
netstat -lntp |grep 5601  ##进程是否启动

5.访问
http://ip+5601

四:logstash

1.安装

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.rpm
rpm -ivh logstash-6.0.0.rpm


2.配置logstash
新建一个conf文件:

input {
    tcp {
        port => 4560    ##开启的端口号,后面项目logback配置的
 mode => "server" 
 tags => ["tags"
 codec => json_lines  ##解析方式
    }
}

output{
  elasticsearch { 
     hosts => ["10.2.0.151:9200"]   ###elasticsearch 主节点
     index =>"%{[appname]}-%{+YYYY.MM.dd}"     #appname  后面logback会用到,指向项目名
  }
  stdout { codec => rubydebug }
}



将文件放入到/etc/logstash/conf.d/目录下

3.检查配置文件是否有错

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK  # 为ok则代表配置文件没有问题


命令说明:
–path.settings 用于指定logstash的配置文件所在的目录
-f 指定需要被检测的配置文件的路径
–config.test_and_exit 指定检测完之后就退出,不然就会直接启动了

4.配置kibana服务器的ip以及配置的监听端口:

vim /etc/rsyslog.conf
#### RULES ####

*.* @@10.2.0.153:4560

###重启rsyslog
systemctl restart rsyslog


5.指定配置文件,启动logstash

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
systemctl start logstash


6.查看是否启动成功

netstat -lntp |grep 9600
netstat -lntp |grep 10514

五:测试

1.登录master节点

curl '10.2.0.151:9200/_cat/indices?v'

可以看到配置的appname的索引

2.创建springboot项目
pom文件如下

"1.0" encoding="UTF-8"?>
"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

    com.test
    springboot-with-elk
    0.0.1-SNAPSHOT
    jar

    springboot-with-elk
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.0.RELEASE
         
    


    
        UTF-8
        UTF-8
        1.8
    


    
        
            org.springframework.boot
            spring-boot-starter-web
        



        
            net.logstash.logback
            logstash-logback-encoder
            5.2
        



        
            org.springframework.boot
            spring-boot-devtools
            runtime
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            

        

    






3.在resources包下创建logback-spring.xml,文件内容如下:

"1.0" encoding="UTF-8"?>

    "org/springframework/boot/logging/logback/base.xml" />
 
    "LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        10.2.0.153:4560
        "UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            {"appname":"first-elk-demo"}
        
    
 
    "INFO">
        "LOGSTASH" />
        "CONSOLE" />
    
 
 




4.创建mainclass,并运行项目

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 *
 * @author admin
 */
@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootWithElkApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Logger logger = LoggerFactory.getLogger(SpringbootWithElkApplication.class);
        for (int i = 0; i < 100; i++) {
            logger.info("Hello,Elk. This is my {} time to see  you;", i, i);
        }
    }
}


5.访问kibana,
创建索引:

访问discover

6 总结

到此,hello world的执行成功了。更加详细高层次的内容还在学习中。欢迎大家一起学习进步。




粉丝福利:实战springboot+CAS单点登录系统视频教程免费领取

???

?长按上方微信二维码 2 秒
即可获取资料



感谢点赞支持下哈 


浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报