ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例

文章目录

  • 一、ELK日志分析系统简介
  • 二、 Elasticsearch介绍
  • 三、Logstash介绍
  • 四、Kibana介绍
  • 五、部署ELK日志分析系统
    • 5.1配置elasticsearch环境
    • 5.2安装logstash
    • 5.3在node2 节点安装kibana
    • 5.4对接Apache

一、ELK日志分析系统简介

日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因,经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
日志是一个非常庞大的数据,并且常常被分散在不同的设备上,这样排查问题的时候找日志就非常繁琐困难。
这时,一个专门处理日志的系统就非常必要,这里介绍其中的一种,ELK日志分析系统(ELasticsearch+Logstash+Kibana)

日志服务器

  • 提高安全性
  • 集中存放日志
  • 缺陷:对日志分析困难

ELK日志分析系统

ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第1张图片
1.将日志进行集中化管理
2.将日志格式化(logstash)
3.对格式化后的数据进行索引和存储(elasticsearch)
4.前端数据的展示(Kibana)
5.用户通过自己的显示设备访问Kibana页面查看

二、 Elasticsearch介绍

■ Elasticsearch的概述

  • 提供了一个分布式多用户能力的全文搜索引擎

■ Elasticsearch核心概念

  • 接近实时
  • 集群
  • 节点
  • 索引
    ◆索引(库)> 类型(表)> 文档(记录)
  • 分片和副本

三、Logstash介绍

■ Logstash介绍

  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入、数据加工(如过滤,改写等)以及数据输出

■ LogStash主要组件·

  • Shipper
  • lndexer
  • Broker
  • Search and Storage
  • Web Interface

四、Kibana介绍

■ Kibana介绍

  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示

■ Kibana主要功能

  • Elasticsearch无缝之集成
  • 整合数据,复杂数据分析
  • 让更多团队成员受益
  • 接口灵活,分享更容易
  • 配置简单,可视化多数据源
  • 简单数据导出

五、部署ELK日志分析系统

实验图示
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第2张图片
需求:

  • 配置ELK日志分析群集
  • 使用logstash收集Apache日志信息
  • 由elasticsearch存储和建立索引
  • 使用Kibana查看分析日志

5.1配置elasticsearch环境

node1与node2除了节点名和主机名分别为node1和node2,其他配置都一样,这里以node1为例

[root@localhost ~]# hostnamectl set-hostname node1   ###更改主机名为node1
[root@localhost ~]# su      ###刷新

[root@node1 ~]#  vi /etc/hosts    ###映射一下主机名和ip地址
20.0.0.24 node1
20.0.0.25 node2

[root@node1 ~]# java -version      ###查看java版本,图形化界面自带j
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

##Xshell直接拉取 把elasticsearch-5.5.0.rpm 传进去
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm  ## rpm包直接安装
[root@node1 ~]# systemctl daemon-reload  ## 重载系统参数
[root@node1 ~]# systemctl enable elasticsearch.service  ## 设置开机自启

[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# ls
elasticsearch.yml        log4j2.properties            jvm.options        scripts
[root@node1 elasticsearch]# cp -p  elasticsearch.yml elasticsearch.yml.bak   ## 先把原配置文件做一下备份,再修改配置文件

更改配置文件,:set nu显示行号,以下为对应行号修改的内容

[root@node1 elasticsearch]# vim elasticsearch.yml
17: cluster.name: my-elk-cluster  ## 集群名称
23: node.name: node1  ## 当前节点名
33: path.data: /data/elk_data   ## 数据存储的位置(目录不存在,需要创建)
37: path.logs: /var/log/elasticsearch/  ## 日志文件存放的位置(软件自带,不需要创建)
43: bootstrap.memory_lock: false 
 ## true:允许内存中的数据交还给SWAP,flase:不允许内存中的数据交还给SWAP。
 选择false,因为swap分区实在硬盘上建立的,如果内存不够,数据溢出,分到硬盘上的话,会影响速度
55: network.host: 0.0.0.0   ## 监听地址,0.0.0.0表示所有网段
59: http.port: 9200   ## ES端口号,外部通信的端口号   PS:9300是集群内部通信端口
68: discovery.zen.ping.unicast.hosts: ["node1", "node2"]   ## 群集中包含的节点名

开启服务

[root@node1 elasticsearch]# mkdir -p /data/elk_data  ## 创建数据存放目录
[root@node1 elasticsearch]# id elasticsearch            ## ES的程序用户,安装的时候自动创建的用户
uid=990(elasticsearch) gid=985(elasticsearch)=985(elasticsearch)
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/    ## 授权,交给用户 elasticsearch去管理
[root@node1 elasticsearch]# systemctl start elasticsearch.service   ## 开启服务
[root@node1 elasticsearch]# netstat -anpt | grep 9200   ## 过滤9200端口(外部访问集群端口)
tcp6       0      0 :::9200                 :::*                    LISTEN      54373/java          

先去网页上测试看看,能看到节点信息
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第3张图片
node2也一样,然后看看他们组成的群集
群集健康状态检查
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第4张图片
群集属性状态 ,可以看到群集内部通信端口9300
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第5张图片
安装elasticsearch-head插件,上述查看集群的方式极其不方便,我们可以通过安装elasticsearch-head插件来管理集群(两边都要装)

上传node-v8.2.1.tar.gz 到 /opt
[root@node1 ~]# yum -y install gcc gcc-c++ make

编译安装node-v8.2.1.tar.gz
[root@node1 ~]# cd /opt
[root@node1 /opt]# tar zxvf node-v8.2.1.tar.gz
[root@node1 /opt]# cd node-v8.2.1/
[root@node1 /opt]# ./configure
[root@node1 /opt]# make -j3 && make install   ## 这里编译安装时间会有点长,耐心等待

安装phyantomjs前端框架
上传phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64 ]# cd bin/
[root@node1 bin ]# cp phantomjs /usr/local/bin/    ##优化命令路径,系统可识别


安装elasticsearch-head 可视化工具
上传elasticsearch-head.tar.gz
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install  ## 安装

修改主配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml    ## 这里的配置文件插在末尾
http.cors.enabled: true      ## 开启跨域访问支持,默认为false
http.cors.allow-origin: "*"     ## 跨域访问允许的域名地址
**注意**:‘:’后面有空格,
[root@node1 ~]# systemctl restart elasticsearch.service 

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

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

[root@node2 elasticsearch-head]# netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      79573/grunt         

访问看看,先用9100访问head页面,然后在内部访问9200访问服务
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第6张图片
查看他们的节点信息,可以看到两个都是主节点,不存在主从关系,去中心化
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第7张图片
创建一个索引信息,创建索引为index-demo,类型为test,可以看到成功创建
这里的数据会被存储到ES集群中

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello

刷新一下,可以看到存储的分片处理与备份。加粗的是主文件的,细框的是备份文件,不论哪个节点宕机,存储都不会丢失,很安全
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第8张图片

5.2安装logstash

主机20.0.0.23
1、 安装apache服务 (httpd)

[root@master ~]# hostnamectl set-hostname apache   
[root@master ~]# su
[root@apache ~]# yum -y install httpd
[root@apache logs]# ll		//看一下日志文件为空
总用量 0
[root@apache logs]# cd
[root@apache ~]# systemctl start httpd		//开启服务
[root@apache ~]# ls /etc/httpd/logs/		//日志文件出现
access_log  error_log
[root@apache ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      17939/httpd  

2、查看java版本

[root@apache ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

3、安装logstash

[root@apache ~]# mkdir /abc
[root@apache ~]# cd /abc

上传包源logstash-5.5.1.rpm
[root@apache abc]# rz -E
rz waiting to receive.
[root@apache abc]# ls
logstash-5.5.1.rpm
[root@apache abc]# rpm -ivh logstash-5.5.1.rpm		//安装
[root@apache abc]# systemctl start logstash.service 		//启动
[root@apache abc]# systemctl enable logstash.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@apache abc]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

3、logstash(Apache)与elasticsearch (node)功能是否正常,做对接测试
logstash字段描述解释:

参数 解释
f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e 后面跟着字符串该字符串可以被当做logstash的配置(如果是””,则默认使用stdin做为输入、stdout作为输出)
-t 测试配置文件是否正确,然后退出

验证输入输出


[root@apache abc]# logstash -e 'input { stdin{} } output { stdout{} }'
一系列信息直到出现successfully
The stdin plugin is now waiting for input:
14:09:36.684 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com		//输入
2020-10-29T06:13:18.799Z apache www.baidu.com  	//输出
www.taobao.com		//输入
2020-10-29T06:13:41.523Z apache www.taobao.com		//输出

验证输出格式化,使用 rubydebug 显示详细信息输出,code为一种编解码器

[root@apache abc]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
14:19:50.822 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2020-10-29T06:20:10.389Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

使用logstash将信息写入elasticsearch 输入 输出 对接
[root@apache abc]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.24:9200"] } }'
弹出一系列信息直到出现successfully
The stdin plugin is now waiting for input:
14:25:49.720 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com	//输入,回车
www.xina.com    //输入,回车 
www.taobao.com  //输入,回车

查看网页,成功输出
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第9张图片
测试系统日志能否被采集

[root@apache log]# chmod o+r /var/log/messages    //对系统日志加other读权限
[root@apache ~]# vim /etc/logstash/conf.d/system.conf   //写入配置文件
input {
        file{
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
            }
      }
output {
        elasticsearch {
            hosts => ["20.0.0.24:9200"]
            index => "system-%{+YYYY.MM.dd}"
            }
       }
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service 

页面刷新一下,就有了ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第10张图片

5.3在node2 节点安装kibana

[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm 

[root@node1 opt]# cd /etc/kibana/
[root@node1 kibana]# ls
kibana.yml
[root@node1 kibana]# cp kibana.yml  kibana.yml.bak
修改配置文件:set nu显示行号
[root@node1 kibana]# vim kibana.yml

2 server.port: 5601			//服务端口号
7 server.host: "0.0.0.0"		//监听所有网段
21 elasticsearch.url: "http://20.0.0.24:9200"   	//和 ES建立联系
30 kibana.index: ".kibana"		//建立索引
[root@node1 kibana]# systemctl start kibana.service 

去页面看 20.0.0.24:5601
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第11张图片
创建一个索引名字Index name pattern:system-* ## 这是对接系统的日志文件
然后点击 create 创建按钮
Discover里查看 ,非常清晰
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第12张图片

5.4对接Apache

[root@apache ~]# vim /etc/logstash/conf.d/apache_log.conf
input {
       file{
         path => "/etc/httpd/logs/access_log"
         type => "access"
         start_position => "beginning"
         }
       file{
         path => "/etc/httpd/logs/error_log"
         type => "error"
         start_position => "beginning"
         }
      }

output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["20.0.0.24:9200"]
          index => "apache_access.%{+YYYY.MM.dd}"
         }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["20.0.0.24:9200"]
          index => "apache_error.%{+YYYY.MM.dd}"
         }
        }
       }
[root@apache ~]#logstash -f /etc/logstash/conf.d/apache_log.conf    //启动指定脚本

建议先访问apache页面,否则可能刷新不出来
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第13张图片
创建索引
ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第14张图片

apache_accessELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第15张图片

apache_error

ELK日志分析系统(ELasticsearch+Logstash+Kibana)——理论+实例_第16张图片

你可能感兴趣的:(可视化,elk,elasticsearch,logstash,kibana)