ELK 日志分析的简介与部署

一、ELK日志分析系统简介

  • Elasticsearch介绍(必须构建出群集模式,没有群集模式 ,不如不搭,两个功能 存储日志数据和索引日志数据)
    端口号9200
    接近实时、群集、节点、索引(索引(库)—类型(表)----文档(记录))、分片和副本。
  • Logstatsh介绍(只干一件事 收集日志,随时收集服务器日志变化,传递给ES存起来)
    一款强大的数据处理工具
    可实现数据传输、格式处理、格式化输出
    数据输入、数据加工(如过滤,改写等)以及数据输出
    主要组件:Shipper 、Indexer、Broker、Search and Storage 、 Web Interface
  • Kibana介绍(以视图展现,以各种图形化的方式展现出来,提供的是一个网站链接面,打开才能看到)
    Elasticsearch无缝之集成
    整合数据,复杂数据分析
    接口灵活,分享更容易
    配置简单,可视化多数据源
    简单数据导出
  • 日志处理步骤
    1、 将日志进行集中化管理
    2.将日志格式化(Logstash) 并输出到Elasticsearch
    3.对格式化后的数据进行索引|和存储(Elasticsearch)
    4.前端数据的展示(Kibana )

二、 部署ELK日志系统

2.1 环境准备与需求描述

需求描述

  • 配置ELK日志分析群集
  • 使用Logstash收集日志
  • 使用kibana查看分析日志
    环境准备
  • 防止干扰 ,关闭所有服务器的防火墙与核心防护
主机服务器 IP 主机名 服务器描述
CentOS7.6 192.168.233.127 node1 Elasticsearch 主机点
CentOS7.6 192.168.233.140 node2 Elasticsearch
CentOS7.6 192.168.233.130 apache 安装apache服务和Logstash收集日志
CentOS7.6 192.168.233.200 kibana 视图化展现日志分析信息

在这里插入图片描述

2.2 Elasticsearch 部署与相关插件安装

2.2.1 Elasticsearch 的安装

root@localhost ~]# hostnamectl set-hostname node1  ## 修改主机名   另一台节点修改为node2
[root@localhost ~]# su
[root@node1 ~]# 

[root@node1 ~]# vim /etc/hosts
192.168.233.127 node1
192.168.233.140 node2
~                      
[root@node1 ~]# java -version      ## 查看java环境,用自带的就行
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

[root@node1 ~]# cd /opt/
将elasticsearch-5.5.0.rpm 软件包上传
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 
[root@node1 opt]# systemctl daemon-reload     ## 重新加载环境
[root@node1 opt]# systemctl  enable elasticsearch.service 

2.2.2 修改Elasticsearch配置文件

root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak ## 留一个配置文件的备份

 [root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster     ## 群集名称要一样,不然就是两个群集
23 node.name: node1        ## node2节点 改为node2  与主机名一致
33 path.data: /data/elk_data      ## 数据存放路径
37 path.logs: /var/log/elasticsearch/       ## 日志存放路径
43 bootstrap.memory_lock: false      ## 引导内存锁定  默认时锁定,即资分配给服务用的资源之后系统不会再给新的资源,这里解开
55 network.host: 0.0.0.0 ## 监听所有地址
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ## 写入群集服务的主机名
[root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml  ## 检查配置文件
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 opt]# mkdir -p /data/elk_data      ## 创建数据存放路径
[root@node1 opt]# chown elasticsearch.elasticsearch /data/elk_data/  ## 授权
[root@node1 opt]# systemctl start elasticsearch.service 
[root@node1 opt]# netstat -antp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      10348/java     

2.2.3 查看Elasticsearch群集信息与健康测试

  • 查看群集健康状况
http://192.168.233.140:9200/_cluster/health?pretty ## 查看群集健康情况
{
  "cluster_name" : "my-elk-cluster",
  "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
}
  • 查看群集信息
http://192.168.233.140:9200/_cluster/state?pretty   ## 查看群集状态信息
{
  "cluster_name" : "my-elk-cluster",
  "version" : 5,
  "state_uuid" : "G3B3azPEROaXv2EVH_hW8w",
  "master_node" : "y27xgCLnTpeZ9C7JtzH6tg",
  "blocks" : { },
  "nodes" : {
    "y27xgCLnTpeZ9C7JtzH6tg" : {
      "name" : "node1",
      "ephemeral_id" : "AlDxEWe3S0yZ7NAp_HCFMg",
      "transport_address" : "192.168.233.127:9300",
      "attributes" : { }
    },
    "mwtmWDrgRHau3r23Fdfw2w" : {
      "name" : "node2",
      "ephemeral_id" : "q2Tg7zKYRe2y5vsz6UgRRQ",
      "transport_address" : "192.168.233.140:9300",
      "attributes" : { }
    }
  },
  "metadata" : {
    "cluster_uuid" : "T9wpASvDQxuxDmfyOgHTDg",
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "y27xgCLnTpeZ9C7JtzH6tg" : [ ],
      "mwtmWDrgRHau3r23Fdfw2w" : [ ]
    }
  }
}

2.2.4 安装node 组件包 插件

【安装elasticsearch-head 插件】  上述查看群集的方式,极其不方便,我们可以通过安装elasticsearch-head插件来管理群集
[root@node1 ~]# cd /opt/
将  node等 安装包拖入node-v8.2.1.tar  phantomjs-2.1.1-linux-x86_64.tar   elasticsearch-head.tar
yum install  gcc gcc-c++ -y
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz 
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure 
[root@node1 node-v8.2.1]# make -j3     ## 调用三个核心数编译
[root@node1 node-v8.2.1]# make install

2.2.5 安装phantomjs前端框架

准备phantomjs-2.1.1-linux-x86_64.tar.bz2 软件包

[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 opt]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/
[root@node1 opt]# mv phantomjs-2.1.1-linux-x86_64 /usr/local/src/

2.2.6 安装elasticsearch-head数据化可视工具

[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

2.2.7修改elasticsearch-head配置文件 并启动服务

root@node1 elasticsearch-head]# cd 
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml   ## 配置文件,插入末尾
http.cors.enabled: true  ## 开启跨域访问支持,默认为faluse
http.cors.allow-origin: "*"      ## 跨域访问允许的域名地址
[root@node1 ~]# systemctl restart elasticsearch.service  ## 重启服务

[root@node1 ~]# cd /usr/local/src/elasticsearch-head/     ## 启动服务器
[root@node1 elasticsearch-head]# npm run start &      ## 切换到后台运行
[1] 111596
[root@node1 elasticsearch-head]# 
> [email protected] start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

[root@node1 elasticsearch-head]# netstat -lnutp | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      111606/grunt        
[root@node1 elasticsearch-head]# netstat -lnutp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      111489/java         

2.2.8 测试

  • 真机上 打开
    192.168.233.127:9100
    在Elasticsearch 后面输入 192.168.233.127:9200 ## 可以看见集群很健康 是绿色
    在这里插入图片描述

192.168.233.140:9100
在Elasticsearch 后面输入 192.168.233.140:9200 ## 可以看见集群很健康 是绿色
在这里插入图片描述

  • 网站登录node1 节点 创建索引为index-dex,类型为test,可以创建成功
    在这里插入图片描述

    • 在node1上写入数据
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type:application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true         ## 表示写入成功
}
  • 这时在网站的数据浏览点击刷新,可以看到写入的数据
    在这里插入图片描述

2.3 apa服务器 apache服务的安装和Logstash的配置

2.3.1 apache服务与Logstash的安装

[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
准备logstash-5.5.1.rpm 压缩包
[root@apache ~]# rpm -ivh logstash-5.5.1.rpm 
[root@apache ~]# systemctl start logstash
[root@apache ~]# systemctl enable logstash
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin
logstash(apache)与elasticsearch(node)功能是否正常,做对接测试
logstash命令测试:
 -f    指定logstash的配置文件,根据配置文件配置logstash
 -e   该字符可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout作为输出)
 -t    测试配置文件是否正确,然后退出

2.3.2 测试Logstash的功能

[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
准备logstash-5.5.1.rpm 压缩包
[root@apache ~]# rpm -ivh logstash-5.5.1.rpm 
[root@apache ~]# systemctl start logstash
[root@apache ~]# systemctl enable logstash
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin
logstash(apache)与elasticsearch(node)功能是否正常,做对接测试
logstash命令测试:
 -f    指定logstash的配置文件,根据配置文件配置logstash
 -e   该字符可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout作为输出)
 -t    测试配置文件是否正确,然后退出

2.3.3 在apache服务器上做对接配置

[root@apache ~]# chmod o+r /var/log/messages  ## 给其他用户加上系统日志可读权限
[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input {
        file{
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
          }
      }
output {
       elasticsearch {
         hosts => ["192.168.233.127:9200"]
         index => "system-%{+YYY.MM.dd}"
         }
       }
[root@apache ~]# systemctl restart logstash.service   ## 重启服务

2.4 kibana的安装

  • 准备 kibana-5.5.1-x86_64.rpm
[root@kibana ~]# mv kibana-5.5.1-x86_64.rpm  /usr/local/src/
[root@kibana ~]# cd /usr/local/src/
[root@kibana src]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@kibana ~]# cd /etc/kibana
[root@kibana kibana]# cp -p kibana.yml kibana.yml.bak
[root@kibana kibana]# vim kibana.yml
2 server.port: 5601   ##kibana打开的端口
7 server.host: "0.0.0.0"   ##kibana侦听的地址
 21 elasticsearch.url: "http://192.168.233.127:9200"      ##和elasticsearch建立联系
30 kibana.index: ".kibana"     ##在elasticsearch中添加.kibana索引

[root@kibana kibana]# systemctl enable kibana
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
[root@kibana kibana]# systemctl start kibana

2.4.1 kibana的配置

访问192.168.233.200:5601 创建一个索引名为system-* ##这是对接系统日志文件
在这里插入图片描述

  • 对接apache服务器的日志文件(有两个:access和error)
cd /etc/logstash/conf.d
vim apache_log.conf
      file{
        path => "/etc/httpd/logs/access_log"
      file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
      } 
output {
      if [type] == "access" {
      elasticsearch {
        hosts => ["192.168.233.127:9200"]
        index => "apache_access-%{+YYY.MM.dd}"
        }
       }
      if [type] == "error" {
      elasticsearch {
        hosts => ["192.168.233.127:9200"]
        index => "apache_error-%{+YYY.MM.dd}"
        }
      } 
     }
      /usr/share/logstash/bin/logstash -f apache_log.conf   ## Apache和logstash对接联系 

2.5 测试

登录真机192.168.130.10:9100 ##查看索引信息
会发现两个文件:apache_error-2020.09.14 apache_access-2020.09.14
在这里插入图片描述

在打开192.168.130.30:5601
创建两个索引,即可通过kiban查看日志文件信息
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47219725/article/details/108674500