ELK日志分析

本文介绍了ELK日志分析系统,包括Elasticsearch、Logstash和Kibana的核心概念与功能。通过集中化管理日志,利用Logstash进行数据处理,Elasticsearch进行数据存储和检索,Kibana进行数据可视化。详细阐述了ELK系统的部署过程,包括环境配置、软件安装、服务优化,以及对接Apache日志文件的实验步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. ELK日志分析系统简介

日志服务器

提高安全性

集中存放日志

缺陷
对日志的分析困难
在这里插入图片描述

1.1 日志的集中化管理

  1. 将日志进行集中化管理

  2. 将日志格式化(Logstash)并输出到Elasticsearch

  3. 对格式化后的数据进行索引和储存(Elasticsearch)

  4. 前段数据的展示(Kibana)

1.2 Elasticsearch的概述

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

1.2.1 Elasticsearch核心概念

接近实时

集群

节点

索引
索引(库)—》类型(表)—》文档(记录)

分片和副本

1.3 logstash介绍

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

1.3.1 logstash主要组件

shipper
lndexer
broker
search and storage
web interface

logstash agent 占资源多(只有这个拥有格式转换,特别重要)转换成es能识别的,在存在es中

filebeat 占资源少,现在用的比较多

1.4 kibana介绍

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

1.4.1 kibana主要功能

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

kafka 消息队列 es通过kafka传递信息给kabana (分布式存储)
处理高并发的,高吞吐的,少不了消息队列 ,现在用的最多的是kafka

1.5 服务优化

如何去实现多线程,迎接高并发量

缓存如何定期处理 ,swap用的硬盘 ,慢于内存

安全性上的优化

高并发来的时候,线程锁,特别是数据库

2. 部署ELK日志分析系统

2.1 案例需求

最少三台服务器

  1. 配置ELK日志分析群集
  2. 使用Logstash收集日志
  3. 使用Kibana查看分析日志

2.2 安装步骤

  1. 安装Elasticsearch软件
  2. 加载系统服务
  3. 更改Elasticsearch主配置文件
  4. 创建数据存放路径并授权
  5. 启动Elasticseach并查看是否成功开启
  6. 查看节点信息

2.3 实验

2.3.1 基础环境部署

登录20.0.0.15 更改主机名 配置域名解析 查看java环境,关闭防火墙和内核


[root@localhost ~]# systemctl stop firewalld.service    ##关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service    ##永不自启防火墙
[root@localhost ~]# vi /etc/selinux/config 
SELINUX=disabled   ##永久关闭内核
 [root@localhost ~]# setenforce 0   ###临时关闭内核

[root@localhost ~]# hostnamectl set-hostname node1  ##更该主机名
[root@localhost ~]# su   ##刷新
[root@node1 ~]# vi /etc/hosts   ##编辑域名解析
20.0.0.15       node1
20.0.0.16       node2

[root@node1 ~]# java -version   ##查看一下java的版本
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)

登录20.0.0.16 更改主机名 配置域名解析 查看java环境,关闭防火墙和内核

[root@localhost ~]# systemctl stop firewalld.service    ##关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service    ##永不自启防火墙
[root@localhost ~]# vi /etc/selinux/config 
SELINUX=disabled   ##永久关闭内核
 [root@localhost ~]# setenforce 0   ###临时关闭内核
 
[root@localhost ~]# hostnamectl set-hostname node1   ##更该主机名
[root@localhost ~]# su   ##刷新
[root@node1 ~]# vi /etc/hosts   ##编辑域名解析
20.0.0.15       node1
20.0.0.16       node2

[root@node1 ~]# java -version   ##查看一下java的版本
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)

2.3.2 部署elasticsearch软件

上传软件包到家目录下面

[oot@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm    ##解压

加载系统服务

[root@node1 ~]# systemctl daemon-reload      ##重新加载
[root@node1 ~]# systemctl enable elasticsearch.service    ##永久自启

更改elasticsearch主配置文件

[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml.bak
[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      ##不在启动的时候锁定内存,锁定物理内存地址,防止es内存被交换出来
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"]

创建数据库存放路径并授权

[root@node1 elasticsearch]# mkdir -p /data/elk_data   ##创建目录
[root@node1 elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/  ##该属主,属组关系

启动elasticsearch服务

[root@node1 elasticsearch]# systemctl start elasticsearch.service   ##开启es服务
[root@node1 elasticsearch]# netstat -auntp | grep 9200   ###看服务是否开启
tcp6       0      0 :::9200                 :::*                    LISTEN      51716/java  

查看节点信息
用浏览器登录20.0.0.15:9200
在这里插入图片描述
查看群集健康状态
在这里插入图片描述
检查群集状态信息
在这里插入图片描述

编译安装node组件依赖包

[root@node1 elasticsearch]# yum -y install gcc gcc-c++ make   ##安装编译器和make编译
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz 
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure   ##检测安装平台
[root@node1 node-v8.2.1]# make -j3   ##编译
[root@node2 node-v8.2.1]# make install

安装phantomjs 前段框架
#####安装phantomjs #####前段框架

[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 ~]# cd phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ll
total 66340
-rwxr-xr-x. 1 root root 67932064 Jan 25  2016 phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/  ##命令系统可识别

elasticsearch-head 项目管理

[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz  ##加压
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

修改配置文件

[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml  ##最后面插入下面两句
http.cors.enabled: ture  ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"  ##跨域访问允许的域名地址

启动elasticsearch-head 启动服务器

[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service 
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &  ##后台启动
[1] 97914
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /root/elasticsearch-head
> grunt server

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

[root@node1 elasticsearch-head]# netstat -lunpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      97924/grunt 

注意:第二台服务器重复以上操作
操作好之后,在其中一台输入

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

查看
在这里插入图片描述

2.3.3 部署logstash

关闭防火墙核心防护

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# vi /etc/selinux/config 
[root@localhost ~]# setenforce 0

更改主机名

[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su

安装apache服务

[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd.service  

安装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)

安装logstash

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm 
[root@apache ~]# systemctl start logstash.service 
[root@apache ~]# systemctl enable 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 测试配置文件是否正确,然后退出

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
.....................................
11:45:09.769 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
11:45:09.838 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
2020-10-29T03:45:45.373Z apache www.baidu.com
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'  ##rubydebug 显示详细信息  codec一种编解码器
...................................................
11:47:07.827 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2020-10-29T03:47:14.047Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

stdin 标准性输入 stdout 标准性输出

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.15:9200"] } }'   ###输出给20.0.0.15
..............................

查看索引信息
在这里插入图片描述
logstash配置文件

[root@apache ~]# chmod o+r /var/log/messages  ##给其他用户读的权限
[root@apache ~]# ll /var/log/messages 
-rw----r--. 1 root root 671312 Oct 29 11:59 /var/log/messages
[root@apache ~]# vi /etc/logstash/conf.d/system.conf
input {
        file {
           path => "/var/log/messages"  ##日志路径
           type => "system"    ##类型
           start_position => "beginning"   ##从最开始开始
        }
       }
output {
        elasticsearch {
        hosts => ["20.0.0.15:9200"]    ##对应主机es地址
        index => "system-%{+YYY.MM.dd}" ##索引输出格式
        }
       }
[root@apache ~]# systemctl restart logstash.service 

2.3.4 安装kabana

[root@node2 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node2 ~]# cd /etc/kibana/
[root@node2 kibana]# ll
total 8
-rw-r--r--. 1 root root 4649 Jul 19  2017 kibana.yml
[root@node2 kibana]# cp -p kibana.yml kibana.yml.bak
2 server.port: 5601       ##打开端口号
7 server.host: "0.0.0.0"    ###kibana倾听的地址
21 elasticsearch.url: "http://20.0.0.16:9200"   ###和es建立连接
30 kibana.index: ".kibana"     ###在es中添加kibana索引

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

测试
在这里插入图片描述

1.4.5 对接apache主机的apache日志文件

[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vi 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.15:9200"]
           index => "apache_access-%{+YYY.MM.dd}"
         }
        }
         if [type] == "error" {
         elasticsearch {
          hosts => ["20.0.0.15:9200"]
          index => "apache_error-%{+YYY.MM.dd}"
         }
        }
      }

[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf  ##-f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash

查看
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值