本地搭建ELK--JAVA版230226

2 篇文章 0 订阅

一、ELK分析

对于ELK,主要是分为Elastic Search、Logstash和Kibana三部分:其中Logstash作为日志的汇聚,可以通过input、filter、output三部分,把日志收集、过滤、输出到Elastic Search中(也可以输出到文件或其他载体);Elastic Search作为开源的分布式引擎,提供了搜集、分析、存储数据的功能,采用的是restful接口的风格;Kibana则是作为Elastic Search分析数据的页面展示,可以进行对日志的分析、汇总、监控和搜索日志用。

二、ELK部署

Elasticsearch 官网elasticsearch-6.3.0.tar

Kibana 官网kibana-6.3.0下载 linux64位

Logstash 官网logstash-6.3.0.tar

网盘资源链接:链接:https://pan.baidu.com/s/10FCMM8De80aWVrVyOIb7SQ?pwd=7734
提取码:7734
–来自百度网盘超级会员V5的分享

Elasticsearch安装

1.解压

tar -zxvf elasticsearch-6.3.0.tar.gz      

2.修改config目录下elasticsearch.yml文件

# 在elasticsearch-6.3.0目录下创建一个data文件存储数据
path.data: "/var/local/elk/elasticsearch-6.3.0/data"
 
# 填写elasticsearch-6.3.0目录下的logs目录,记录es日志 
path.logs: "/var/local/elk/elasticsearch-6.3.0/logs"
 
# 端口号
http.port: 9200
 
# 建议改成服务器ip
network.host: 192.168.128.150

3.es不能使用root用户启动

#创建新用户及授权
groupadd es
 
useradd es -g es -p elasticsearch
 
chown -R es:es elasticsearch-6.3.0

4.启动

sudo sysctl -w vm.max_map_count=262144
sudo vi /etc/security/limits.conf
soft    nofile          65536
hard    nofile          65536
#启动前先切换用户
su es
# 后台启动
nohup ./bin/elasticsearch -d
 
# 查看是否启动成功
ps -ef|grep elasticsearch
 
# 输入此命令查看是否有json字符串
curl http://ip:9200

注意!!!7版本以上的es需要的jdk可能都是11或者以上的,而我们的项目大多数都是使用的jdk8,但是7版本以上的es自带了jdk,此时我们需要把es的启动环境jdk进行配置。

修改bin目录下的elasticsearch-env文件

 # 修改前 
 if [ ! -z "$JAVA_HOME" ]; then
    JAVA="$JAVA_HOME/bin/java"
    JAVA_TYPE="JAVA_HOME"
  else
    if [ "$(uname -s)" = "Darwin" ]; then
      # macOS has a different structure
      JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
    else
      JAVA="$ES_HOME/jdk/bin/java"
    fi
    JAVA_TYPE="bundled jdk"
  fi
 
 
 
 
#修改后
 if [ "$(uname -s)" = "Darwin" ]; then
   # macOS has a different structure
   JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
 else
   JAVA="$ES_HOME/jdk/bin/java"
 fi
 JAVA_TYPE="bundled jdk"

Kibana安装

1.解压

tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz

2.修改配置config下的kibana.yml文件

# 端口号
server.port: 5601
 
# ip
server.host: "服务器ip"
 
# es连接
elasticsearch.url: "http://"es的ip地址":9200"

3.启动并检查

# 后台启动
nohup ./bin/kibana -d
 
# 检查是否启动成功
ps -ef|grep kibana

启动后到浏览器输入kibana的地址: ip:5601 出现以下前端页面代表es与kibana建立连接成功,否则失败。

Logstash安装

1.解压

# 解压
tar -zxvf logstash-6.3.0.tar.gz

2.配置文件配置

# 在config目录下新建一个配置文件名为:logstash.conf,配置如下
input {
  tcp {
    port => 5400
    type => "tcp_log"
    codec=> json_lines
     }
}
 
output{      
   if [type] == "tcp_log" {
                elasticsearch {
                        hosts => ["ip:9200"]
                        index => "tcplog-%{+YYYY.MM.dd}"
                }
        }   
}
  1. 启动
# 在logstash.6.3.0目录下后台启动
nohup ./bin/logstash -f ./config/logstash.conf &
 
# 检查是否成功
ps -ef|grep logstash

经过以上配置,elk基本就已经搭建完成了,能够满足正常的使用,但是企业中实战完全不够,因为安全性不够好,es与kibana默认都是没有密码的需要配置密码。

安装配置 Filebeat

1.运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm:

[root@node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2.在/etc/yum.repos.d/目录中,创建一个名为elastic.repo的文件,添加下面配置:

[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3.安装 Filebeat:

[root@node1 ~]# yum makecache && yum install filebeat -y

4.设置开机启动,以及启动系统服务:

[root@node1 ~]# sudo /bin/systemctl daemon-reload
[root@node1 ~]# sudo /bin/systemctl enable filebeat.service

5.编辑配置文件:

[root@node1 ~]# vi /etc/filebeat/filebeat.yml
filebeat.prospectors:
- type: log
   paths:
      - /var/log/messages  # 指定需要收集的日志文件的路径

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["node:9200"]  # 配置 Elasticsearch 服务器的 IP 地址

6.启动 Filebeat 服务:

[root@node1 ~]# systemctl start filebeat

查看 Filebeat 服务状态:

[root@node1 ~]# systemctl status filebeat
filebeat.service - filebeat
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled)
   Active: active (running) since 二 2018-05-15 09:29:44 CEST; 1min 12s ago
     Docs: https://www.elastic.co/guide/en/beats/filebeat/current/index.html
 Main PID: 12332 (filebeat)
   CGroup: /system.slice/filebeat.service
           └─12332 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/...

515 09:29:44 node1 systemd[1]: Started filebeat.
  1. Filebeat 采集的日志数据,在 Kibana 中显示

查看 Elasticsearch 索引列表,可以看到生成了filebeat-*类型的日志数据:

[root@node1 ~]# curl http://node1:9200/_cat/indices?v
health status index                  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   twitter                k1KnzWyYRDeckjt7GASh8w   5   1          1            0      5.2kb          5.2kb
yellow open   .kibana                8zJGQkq8TwC4s3JJLMX44g   1   1          6            0     33.3kb         33.3kb
yellow open   system-syslog-2018.05  0aKfJeOmTZ6yen9eSlCOig   5   1        689            0    652.3kb        652.3kb
yellow open   filebeat-2018.05.15    K852lKlgSaKG6-hE_GNB4w   5   1      27417            0      6.7mb          6.7mb
yellow open   zipkin:span-2018-05-15 8vnm9SJvSlK-cAtakK8VeQ   3   1          9            0     47.3kb         47.3kb
yellow open   zipkin:span-2018-05-14 TZ-MmJpoSs-NwjHjxEvhFQ   3   1        219            0    127.1kb        127.1kb
yellow open   student                iZPqPcwrQbifGOfE9DQYvg   5   1          0            0       955b           955b

三、 ES、Kibana、Logstash密码配置

ES密码设置

1.关于x-pack插件

x-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,可以轻松的启用或者关闭一些功能。默认我们的elk部署后,可以直接就进入web管理界面,这样会带来极大的安全隐患。

es的密码配置需要借助x-pack插件,若是6.3.0之前的版本需要下载插件,6.3.0以后都不需要下载,如果需要下载则按一下进行操作:

# 在es的目录下进行下载
./elasticsearch-plugin install x-pack
  1. 在es的config目录下elasticsearch.yml中添加如下配置
# 开启集群中http传输,我搭建的为单机
xpack.security.transport.ssl.enabled: true
 
# 开启xpack
xpack.security.enabled: true
 
# 是否支持跨域,默认为false
http.cors.enabled: true
 
# 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?:\/\/localhost(:[0-9]+)?/
http.cors.allow-origin: "*"
 
# 请求头设置,可有可无
http.cors.allow-headers: "Authorization"

3.启动es

#启动前先切换用户
 
su es
 
# 后台启动
nohup ./bin/elasticsearch -d
 
# 查看是否启动成功
ps -ef|grep elasticsearch
 
# 输入此命令查看是否有json字符串
curl http://ip:9200

4.设置密码

# 在es的bin目录下以交互的方式设置密码
./bin/elasticsearch-setup-passwords interactive

此时可能会出现错误,报错信息如下:

Unexpected response code [403] from calling GET http://10.10.1.10:9200/_xpack/security/_authenticate?pretty
It doesn't look like the X-Pack security feature is available on this Elasticsearch node.
Please check if you have installed a license that allows access to X-Pack Security feature.
 
ERROR: X-Pack Security is not available.

没有关系,你只需要等等等等,不出五分钟你会发现你去浏览器访问es的时候需要你输入密码

若是还是不需要密码即可访问es的界面,请参考以下博客:

CentOS7上安装配置破解Elasticsearch+Kibana 6.4.2-6.5.1全过程_WolfBolin的博客-CSDN博客

当出现可以需要密码访问es时候执行以下命令,进行密码配置:

./bin/elasticsearch-setup-passwords interactive

然后按照以下步骤配置密码es,kibana以及logstash密码

[root@sbox-tt bin]# ./elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,kibana,logstash_system,beats_system.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
 
 
Enter password for [elastic]: 
passwords must be at least [6] characters long
Try again.
Enter password for [elastic]: 
Reenter password for [elastic]: 
Passwords do not match.
Try again.
Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [elastic]

Kibana密码设置

由于es已经设置好了密码,此时如果kibana想要从es中获取数据就必须进行账号密码配置,在kibana的config目录下进行Kibana.yml配置如下

# 默认用户为elastic
elasticsearch.username: "elastic"
elasticsearch.password: "密码"

Logstash密码设置

logstash需要把收集来的数据传输到es,这个时候需把前面配置好的logstash.conf文件进行更改:

# tcp表示以tcp的方式进行日志传输,此方式更好与项目结合
input {
  tcp {
    port => 5400
    type => "tcp_log"
    codec=> json_lines
     }
  tcp{
    port => 5301
    type => "tcp_data"
    codec=> json_lines
  }
}
 
output{      
   if [type] == "tcp_log" {
                elasticsearch {
                        hosts => ["ip:9200"]
                        index => "tcplog-%{+YYYY.MM.dd}"
                        user  => elastic
                        password => 密码
                }
        }
   if [type] == "tcp_data" {
                elasticsearch {
                        hosts => ["ip:9200"]
                        index => "%{[appname]}-%{+YYYY.MM.dd}"
                        user  => elastic
                        password => 密码
                }
        }     
}

登录Kibana,浏览器访问:ip:5601,出现以下界面:

Kibana的superuser的账号为:elastic 密码为前面设置好的密码。登录后,elk及搭建完成。

四、ELK与项目结合

1、SpringBoot与LogBack日志配置

SpringBoot项目中引入jar包,该jar包起到Socket通过TCP方式向Logstash进行日志传输。

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

2.接着增加logback-spring.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <property name="LOG_HOME" value="logs/demo.log" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
 
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--此处为logstash的ip以及通信的端口,在logstash.conf文件中可以查看-->
        <destination>ip:5301</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
            <!--此处的appname 为项目中独有的日志名字,在logstash.config文件中有配置-->
            <customFields>{"appname": "pay_mode"}</customFields>
        </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="logstash" />
</root>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值