理论+实验·ELK日志分析系统

ELK日志分析系统

一、ELK日志分析系统简介

  • 日志服务器

    1. 提高安全性
    2. 集中存放日志
    3. 缺陷
      • 对日志的分析困难
  • ELK日志分析系统

    1. Elasticsearch
    2. Logstash
    3. Kibana
  • 日志处理步骤

    1. 将日志进行集中化管理
    2. 将日志格式化(Logstash)并输出到Elasticsearch
    3. 对格式化后的数据进行索引和存储(Elasticsearch)
    4. 前端数据的展示(Kibana)

二、Elasticsearch介绍

  • Elasticsearch的概述

    1. 提供了一个分布式多用户能力的全文搜索引擎
  • Elasticsearch核心概念

    1. 接近实时
    2. 集群
    3. 节点
    4. 索引
      • 索引(库)—>类型(表)—>文档(记录)
    5. 分片和副本

三、Logstash介绍

  • Logstash介绍

    1. 一款强大的数据处理工具
    2. 可实现数据传输、格式处理、格式化输出
    3. 数据输入、数据加工(如过滤,改写等)以及数据输出
  • Logstash主要组件

    1. Shipper
    2. Indexer
    3. Broker
    4. Search and Storage
    5. Web Interface

四、Kibana介绍

  • Kibana介绍

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

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

五、部署ELK日志分析系统

  • 实验环境

    elasticsearch-5.5.0.rpm

    phantomjs-2.1.1-linux-x86_64.tar.bz2

    elasticsearch-head.tar.gz

    node-v8.2.1.tar.gz

    20.0.0.10			部署Elasticsearch---node1			'//存储数据及索引'
    20.0.0.20			部署Elasticsearch---node2			'//存储数据及索引'
    20.0.0.30			部署logstash						'//收集日志及格式化'
    20.0.0.40			部署kibana						'//视图显示'
    
  • 实验步骤
    1. 配置Elasticsearch环境(node1、node2)
      #20.0.0.10
      hostnamectl set-hostname node1
      vim /etc/hosts
      20.0.0.10 node1
      20.0.0.20 node2
      java -version			'//查看java版本'
      setenforce 0
      systemctl stop firewalld
      
      #20.0.0.20
      hostnamectl set-hostname node2
      vim /etc/hosts
      20.0.0.10 node1
      20.0.0.20 node2
      java -version			'//查看java版本'
      setenforce 0
      systemctl stop firewalld
      
      
    2. 安装部署Elasticsearch(node1、node2)
      #两个节点相同的安装步骤
      elasticsearch-5.5.0.rpm
      phantomjs-2.1.1-linux-x86_64.tar.bz2
      elasticsearch-head.tar.gz
      node-v8.2.1.tar.gz
      将四个需要用到的包导入/opt/目录下
      
      #安装Elasticsearch.rpm包
      rpm -ivh elasticsearch-5.5.0.rpm
      
      #加载系统服务
      systemctl daemon-reload
      systemctl enable elasticsearch.service
      
      #修改ELasticsearch配置文件
      cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak			'//复制一份备份文件'
      vim /etc/elasticsearch/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			'//不在启动的时候锁定内存'
      55//network.host: 0.0.0.0					'//提供服务绑定的IP地址,0.0.0.0代表所有地址'
      59//http.port: 9200							'//监听端口为9200'
      68//discovery.zen.ping.unicast.hosts: ["node1", "node2"]	'//集群发现通过单播实现'
      
      #创建数据存放路径并授权
      mkdir -p /data/elk_data
      chown elasticsearch.elasticsearch /data/elk_data/
      
      #启动并查看elasticsearch是否成功开启
      systemctl start elasticsearch.service
      netstat -ntap | grep 9200
      
      
    3. 查看节点信息 使用真机浏览器打开20.0.0.10:9200、20.0.0.20:9200会显示(node1、node2)
      #20.0.0.10:9200
      {
        "name" : "node1",
        "cluster_name" : "my-elk-cluster",
        "cluster_uuid" : "cx1Xb3tzRp2WMn0wrSg-iQ",
        "version" : {
          "number" : "5.5.0",
          "build_hash" : "260387d",
          "build_date" : "2017-06-30T23:16:05.735Z",
          "build_snapshot" : false,
          "lucene_version" : "6.6.0"
        },
        "tagline" : "You Know, for Search"
      }
      
      #20.0.0.20:9200
      ...
      
      
    4. 集群检查健康与状态(node1、node2)
      #查看健康20.0.0.10: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
      }
      
      #查看健康20.0.0.20:9200/_cluster/health?pretty
      ...
      
      #查看状态20.0.0.10:9200/_cluster/status?pretty
      {
        "error" : {
          "root_cause" : [
            {
              "type" : "illegal_argument_exception",
              "reason" : "No endpoint or operation is available at [status]"
            }
          ],
          "type" : "illegal_argument_exception",
          "reason" : "No endpoint or operation is available at [status]"
        },
        "status" : 400
      }
      
      #查看状态20.0.0.20:9200/_cluster/status?pretty
      ...
      
      
    5. 安装node组件依赖包(node1、node2)
      cd /opt
      yum -y install gcc gcc-c++
      tar zxvf node-v8.2.1.tar.gz
      cd node-v8.2.1/
      ./configure
      make -j3
      make install
      
      
    6. 安装phantomjs前端框架(node1、node2)
      cd /opt
      tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
      cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
      cp phantomjs /usr/local/bin
      
      
    7. 安装Elasticsearch-head数据可视化工具(node1、node2)
      cd /opt
      tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
      cd /usr/local/src/elasticsearch-head/
      npm install
      
      
    8. 修改Elasticsearch主配置文件(node1、node2)
      vim /etc/elasticsearch/elasticsearch.yml
      ...
      http.cors.enabled: true					'//开启跨域访问支持,默认为false'
      http.cors.allow-origin: "*"				'//跨域访问允许的域名地址'
      
      systemctl restart elasticsearch
      
    9. 启动Elasticsearch-head 启动服务器(node1、node2)
      cd /usr/local/src/elasticsearch-head/
      npm run start &							'//切换到后台运行'
      netstat -antp | grep 9200
      netstat -antp | grep 9100
      
      
    10. 真机浏览器输入20.0.0.10:9100、20.0.0.20:9100 可以看到群集健康状态是绿色的
      在Elasticsearch中输入http://20.0.0.10:9100/  点击连接
      
      在Elasticsearch中输入http://20.0.0.20:9100/  点击连接
      
      
      

      #新建索引

在这里插入图片描述

  ```shell
  #20.0.0.10
  #插入一个数据进行测试
  curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type:application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
  ```

在这里插入图片描述

  1. 安装logstash(logstash-apache)
    #关闭防火墙与核心防护
    setenforce 0
    systemctl stop firewalld
    
    #更改主机名
    hostnamectl set-hostname logstash-apache
    
    #安装Apache服务(httpd)
    yum -y install httpd
    systemctl start httpd
    
    #安装Java环境
    java -version			'//没有安装需要yum -y install java'
    
    #安装logstash
    #上传软件包到/opt/目录下
    rpm -ivh logstash-5.5.1.rpm					'//安装logstash'
    systemctl start logstash.service			'//启动logstash'
    systemctl enable logstash.service			'//设置开启自启'
    ln -s /usr/share/logstash/bin/logstash /usr/local/bin/			'//建立软连接'
    
    #logstash(apache)与elasticsearch(node)功能是否正常,做对接测试
    #logstash这个命令测试
    #字段描述
    #		-f	通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
    #		-e	后面跟着字符串该字符串可以被当作logstash的配置(如果是" ",则默认使用stdin作为输入,stdout作为输出)
    #		-t	测试配置文件是否正确,然后退出
    
    #在apache服务器上---输入采用标准输入	输出采用标准输出
    logstash -e 'input { stdin {} } output { stdout {} }'
    ...
    www.test.com
    2020-09-15T09:40:41.042Z logstash-apache www.test.com
    
    
    #使用rubydebug显示详细输出,codec为一种编解码器
    logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }'
    ...
    www.test.com
    {
        "@timestamp" => 2020-09-15T10:26:11.142Z,
          "@version" => "1",
              "host" => "logstash-apache",
           "message" => "www.test.com"
    }
    
    #使用logstash将信息写入elasticsearch中---输入输出对接
    logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["主节点IP地址:9200"] } }'
    ...
    www.test.com			
    '//浏览器里面输入:"主节点IP:9100"会显示www.test.com'
    
    #logstash-apache主节做对接配置
    =======================logstash配置文件=====================
    logstash配置文件主要由三部分组成:input、output、filter(根据需求)
    
    chmod o+r /var/log/messages
    ll /var/log/messages
    
    vim /etc/logstash/conf.d/system.conf
    input {
            file{
                    path => "/var/log/messages"
                    type => "system"
                    start_position => "beginning"
            }
    }
    output {
            elasticsearch{
                    hosts => ["20.0.0.20:9200"]
                    index => "system-%{+YYYY.MM.dd}"
            }
    }
    
    systemctl restart logstash.service
    '//浏览器输入"主节点IP:9100"查看信息"/var/log/messages'
    
  2. 安装kibana(kibana)
    #安装kibana
    #上传软件包到/opt/目录下
    setenforce 0
    systemctl stop firewalld
    hostnamectl set-hostname kibana
    rpm -ivh kibana-5.5.1-x86_64.rpm		'//安装rpm包'
    cd /etc/kibana/
    cp -p kibana.yml kibana.yml.bak			'//备份'
    vim /etc/kibana/kibana.yml
    2//server.port: 5601			'//打开kibana端口'
    7//server.host: "0.0.0.0"		'//kibana监听地址---监听所有'
    21//elasticsearch.url: "http://主节点IP:9200"		'//与elasticsearch建立连接'
    30//kibana.index: ".kibana"		'//在elasticsearch中添加.kibana索引---测试使用'
    systemctl start kibana.service	'//启动kibana服务'
    systemctl enable kibana.service	'//设置开机自启'
    
    '//可以访问20.0.0.40:5601进行查看视图'
    
  3. 对接apache日志文件
    #logstash-apache
    cd /etc/logstash/conf.d
    vim 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.20:9200"]
    		index => "apache_access-%{+YYYY.MM.dd}"
    	}
    	}
    	if [type] == "error" {
    	elasticsearch{
    		hosts => ["20.0.0.20:9200"]
    		index => "apache_error-%{+YYYY.MM.dd}"
    	}
    	}
    }
    
    /usr/share/logstash/bin/logstash -f apache_log.conf 	'//重启服务也可以'
    
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值