Elastic Stack使用笔记

  • 本次使用目的:通过Elastic Stack搭建出一个小型日志系统

从springboot开始输出日志到log,在maven中引入logback-ecs-encoder,来生成log.json,然后通过filebeat获取log.json,把内容存入elasticsearch之后,通过kibana来浏览数据。

ip地址体验版:localhost方式体验交互
随意elasticsearch服务+kibana服务+filebeat服务
ip地址开发版:体验搭建一个小型日志系统
192.168.33.131elasticsearch服务+kibana服务
192.168.33.132springboot服务+filebeat服务
  • 官方地址getting started进行开始:
https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-elastic-stack.html

开始根据官网的教程下边进行摘要总结:(本次调试系统为centos7桌面版至少4G内存,带桌面的linux发行版方便localhost浏览器调试,mac系统也体验过是ok的,不太建议windows调试)

下边先安装elasticsearch、kibana、Filebeat体验一下

  • 安装启动elasticsearch:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.16.2-linux-x86_64.tar.gz
cd elasticsearch-7.16.2
./bin/elasticsearch

在centos中打开Firefox浏览器,输入网址访问:http://127.0.0.1:9200

  • 安装启动kibana
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.16.2-linux-x86_64.tar.gz
tar xzvf kibana-7.16.2-linux-x86_64.tar.gz
cd kibana-7.16.2-linux-x86_64/
./bin/kibana

在centos中打开Firefox浏览器,输入网址访问:http://127.0.0.1:5601

getting started中演示的是Metricbeat的例子,可自行测试,我们的目标是Filebeat,点击页面链接开始Filebeat

  • 官方地址Filebeat:
https://www.elastic.co/guide/en/beats/filebeat/7.16/filebeat-installation-configuration.html

 下载解压:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-linux-x86_64.tar.gz
tar xzvf filebeat-7.16.2-linux-x86_64.tar.gz

 修改配置: 进入到filebeat目录中vim filebeat.yml

output.elasticsearch:
  hosts: ["localhost:9200"]
设置assets:
./filebeat setup -e

 启动:(虽然启动了但是没有采集任何数据)

sudo chown root filebeat.yml 
sudo ./filebeat -e
  • 官方日志教程:
https://www.elastic.co/guide/en/ecs-logging/java/current/setup.html

直接从step 3开始,打开vim filebeat.yml,step 1后边接入springboot应用的时候用到

filebeat.inputs:
- type: log
  paths: /home/zph/data/logs/demo/*.json
  json.keys_under_root: true
  json.overwrite_keys: true
  json.add_error_key: true
  json.expand_keys: true

重启filebeat程序,往/home/zph/data/logs/中创建任意名字的.json文件写入几行数据即可。打开kibana进行查看:http://127.0.0.1:5601/app/discover

好了,就是这么简单已经体验过filebeat采集数据到文件,通过kibana来展示了。玩归玩闹归闹,现在还差的远,远程访问、安全配置如何设置,接着往下走。

分割线---------------------


  • 开启elasticsearch外部访问(启动程序用到的端口9200,5601)

进入elasticsearch目录编辑配置文件:vim elasticsearch.yml

network.host: 0.0.0.0

重启可能报错,遇到了3个错误如下

第一个错:启动报错,修改配置:
vim /etc/security/limits.conf
zph soft nofile 65535
zph hard nofile 65537
重新登录zph用户查看修改效果:
ulimit -n
ulimit -H -n
第二个错:启动报错:
vim /etc/sysctl.conf
vm.max_map_count=262144
使配置生效:
/sbin/sysctl -p
第三个错:启动报错:
vim config/elasticsearch.yml
discovery.seed_hosts:  ["127.0.0.1", "[::1]"]
启动成功

用IP访问下试试:http://192.168.33.131:9200/

对外访问kibana:修改配置文件vim config/kibana.yml

server.host: "192.168.33.131"

 重新启动,用IP访问下试试http://192.168.33.131:5601/

  • 开启安全配置:开发阶段先设置成minimal security
https://www.elastic.co/guide/en/elasticsearch/reference/7.16/configuring-stack-security.html

进入elasticsearch目录编辑配置文件:vim elasticsearch.yml

xpack.security.enabled: true
#单节点的时候
discovery.type: single-node

杀死elasticsearch 进程重启,这次采用后台进程启动:

nohup ./bin/elasticsearch >> logs/elasticsearch.log &

设置用户和密码:自动生成,生成的内容自行保存,十分重要

./bin/elasticsearch-setup-passwords auto

访问http://192.168.33.131:9200,此时需要登录账号密码了。

进入kibana目录编辑配置文件:vim kibana.yml

elasticsearch.username: "kibana_system"

创建keystore方式来添加密码:kibana_system用户和密码前边已经自行保存

./bin/kibana-keystore create
./bin/kibana-keystore add elasticsearch.password

杀死kibana进程重启,这次采用后台进程启动:

 nohup ./bin/kibana >> kibana.log &
查看进程:
ps -ef|grep node   (因为kibana是node写的,所以查看进程需要如此)
查看进程id  :  netstat -tunlp|grep 5601    kibana默认5601端口

访问http://192.168.33.131:5601/ ,此时需要登录账号密码了。

打开vim filebeat.yml,之前已经自行保存

output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 

setup.kibana:
    host: "mykibanahost:5601" 
    username: "my_kibana_user"  
    password: "{pwd}"

如果使用keystore创建密码则参考:https://www.elastic.co/guide/en/beats/filebeat/7.16/keystore.html,否则明文写入密码

重启Filebeats,后台运行

nohup ./filebeat -e >> filebeat.log &

官网初始化下载springboot,带web功能

pom加载依赖一个日志转json,一个方便日志打印

<dependency>
    <groupId>co.elastic.logging</groupId>
    <artifactId>logback-ecs-encoder</artifactId>
    <version>1.3.0</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

配置application.properties

spring.profiles.active=dev
spring.application.name=my-application

下面配置logback-spring

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">

    <property name="LOG_HOME" value="logs/demo"/>
    <property name="PROJECT_NAME" value="demo"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%file:%line) |%green(%logger)
                |%cyan(%msg%n)
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <springProperty name="SERVICE_NAME" source="spring.application.name"/>
    <appender name="ECS_JSON_FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="co.elastic.logging.logback.EcsEncoder">
            <serviceName>${SERVICE_NAME:-spring-boot-application}</serviceName>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
            <fileNamePattern>${ROLLING_FILE_NAME_PATTERN:-${LOG_HOME}/${PROJECT_NAME}_info.%d{yyyy-MM-dd}.%i.log.json}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-7}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-0}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>15</MaxHistory>
            <!--日志文件最大的大小 -->
            <MaxFileSize>10MB</MaxFileSize>
        </rollingPolicy>
    </appender>

    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="ECS_JSON_FILE_INFO"/>
            <appender-ref ref="INFO"/>
        </root>
    </springProfile>


</configuration>

创建controller

package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/test")
    public void test(){
        log.info("数据库信息");
    }
}

打包好,放到192.168.33.132中的/home/zph/data/目录中

使用java -jar运行springboot程序

访问:http://192.168.33.132:8080/test/test

打开/home/zph/data/logs/demo目录可以看到输出的启动info信息和自己输出的info信息,

访问kibana:http://192.168.33.131:5601 数据内容会有延迟,过会就可以看到数据

后续:安全配置还有basic security + tls for rest

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值