解决方案之ELK日志系统

Table of Contents

1. Elasticsearch集群部署

1.1 Elasticsearch简介

1.2 Elasticsearch安装与部署

1.3 elasticsearch插件安装

1.4 elasticsearch分布式部署

1.5 elasticsearch节点角色 

1.6 elasticsearch节点优化

2. logstash数据采集

2.1 Logstash简介

2.2 Logstash安装与配置

2.3 file输出插件

2.4 elasticsearch输出插件

2.5 file输入插件

2.6 syslog插入插件

2.7 多行过滤插件

2.8 grok过滤插件

3. kibana可视化

3.1 kibana简介

3.2 kibana安装与配置

3.3 kibana使用

3.4 启用xpack安全验证


1. Elasticsearch集群部署

1.1 Elasticsearch简介

官网:https://www.elastic.co/cn/

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  • 实时分析的分布式搜索引擎。
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

基础模块

模块说明
cluster管理集群状态,维护集群层面的配置信息
alloction封装了分片分配相关的功能和策略
discovery发现集群中的节点,以及选举主节点
gateway对收到master广播下来的集群状态数据的持久化存储
indices管理全局级的索引设置
http允许通过JSON over HTTP的方式访问ES的API
transport用于集群内节点之间的内部通信

     engine

封装了对Lucene的操作及translog的调用

Elasticsearch应用场景:

  • 信息检索
  • 日志分析
  • 业务数据分析
  • 数据库加速
  • 运维指标监控 

1.2 Elasticsearch安装与部署

下载地址:https://elasticsearch.cn/download/

清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.6.0/

官方安装步骤文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

安装软件

rpm -ivh jdk-8u171-linux-x64.rpm 
rpm -ivh elasticsearch-7.7.1.rpm    //7.6版本以上自带jdk 

设置服务自启

systemctl daemon-reload 
systemctl enable elasticsearch

修改配置文件

vim /etc/elasticsearch/elasticsearch.yml

修改系统限制:kernel > system > user

vim /etc/security/limits.conf

vim /etc/elasticsearch/jvm.options

Systemd配置【使用Systemd启动】 

vim /usr/lib/systemd/system/elasticsearch.service ##在service模块添加

启动

systemctl daemon-reload
systemctl start elasticsearch

测试访问

1.3 elasticsearch插件安装

安装详解:https://github.com/mobz/elasticsearch-head

下载安装

wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip 

下载安装nodejs(head插件本质上是一个nodejs的工程)

wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm

node -v 
npm -v  ##查看版本,确定安装成功

更换npm源安装

cd elasticsearch-head-master/ 
npm install  --registry=https://registry.npm.taobao.org 

缺少phantomjs

下载并解压phantomjs

将执行文件复制到bin目录下

执行npm install

npm install  --registry=https://registry.npm.taobao.org

修改ES主机ip和端口

vim ~/elasticsearch-head/_site/app.js

启动head插件

npm run start &

image widget

修改ES跨域主持

vim /etc/elasticsearch/elasticsearch.yml

重启ES服务

systemctl restart elasticsearch.service

访问head插件服务

创建索引

查看es状态

1.4 elasticsearch分布式部署

安装两个es节点,并修改配置

node2:

node3:

查看节点状态

1.5 elasticsearch节点角色 

Master:

主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。

Data Node:

主要负责集群中数据的索引和检索,一般压力比较大。

Coordinating Node:

原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。

Ingest Node:

专门对索引的文档做预处理 

1.6 elasticsearch节点优化

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。

默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。

节点角色是由以下属性控制:

node.master:  false|true      

这个属性表示节点是否具有成为主节点的资格,注意:此属性的值为true,并不意味着这个节点就是主节点。     因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。  

node.data:  true|false

这个属性表示节点是否存储数据

node.ingest:  true|false

是否对文档进行预处理。

search.remote.connect: true|false  

是否禁用跨集群查询

默认情况下这些属性的值都是true。

第一种组合:(默认)

node.master: true

node.data: true

node.ingest:  true

search.remote.connect: true

这种组合表示这个节点即有成为主节点的资格,又存储数据。 如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。 测试环境下这样做没问题,但实际工作中不建议这样设置。

第二种组合:(Data node)

node.master: false

node.data: true

node.ingest: false

search.remote.connect: false

这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。 这个节点称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。

第三种组合:(master node)

node.master: true

node.data: false

node.ingest: false

search.remote.connect: false

这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。 这个节点我们称为master节点。

第四种组合:(Coordinating Node)

node.master: false

node.data: false

node.ingest: false

search.remote.connect: false

这种组合表示这个节点即不会成为主节点,也不会存储数据, 这个节点的意义是作为一个协调节点,主要是针对海量请求的时候可以进行负载均衡。

第五种组合:(Ingest Node)

node.master: false

node.data: false

node.ingest: true

search.remote.connect: false

这种组合表示这个节点即不会成为主节点,也不会存储数据, 这个节点的意义是ingest节点,对索引的文档做预处理。

生产集群中可以对这些节点的职责进行划分

建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。

再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。

所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。

各类节点对资源的需求

master节点:普通服务器即可(CPU、内存 消耗一般)

data节点:主要消耗磁盘、内存。 path.data: data1,data2,data3     这样的配置可能会导致数据写入不均匀,建议只指定一个数据路径,磁盘可以使用raid0阵列,而不需要成本高的ssd。

Coordinating节点:对cpu、memory要求较高。

2. logstash数据采集

2.1 Logstash简介

Logstash是一个开源的服务器端数据处理管道。

logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是Elasticsearch)

Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器

输入:

采集各种样式、大小和来源的数据  Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。 能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

过滤器:

实时解析和转换数据 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。利用 Grok 从非结构化数据中派生出结构从 IP 地址破译出地理坐标将 PII 数据匿名化,完全排除敏感字段简化整体处理,不受数据源、格式或架构的影响

输出:

选择您的存储库,导出您的数据  尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。 Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

2.2 Logstash安装与配置

官方下载地址:https://elasticsearch.cn/download/

推荐下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/

Logstash安装

rpm -ivh jdk-8u221-linux-x64.rpm

rpm -ivh logstash-7.7.1.rpm

软链接

ln -s /usr/share/logstash/bin/logstash /usr/bin/  ##软连接

标准输入到标准输出

logstash -e 'input { stdin { } } output { stdout {}

2.3 file输出插件

标准输入到文件

vim /etc/logstash/conf.d/file.conf

指定配置文件运行

logstash -f /etc/logstash/conf.d/file.conf

在标准输入中键入"hello"后查看 

cat /tmp/logstash.txt 

2.4 elasticsearch输出插件

标准输入到es主机

vim /etc/logstash/conf.d/es.conf
###
input {
        stdin { }
}
output {
        elasticsearch {
        # 输出到ES主机与端口
                hosts => "192.168.1.11:9200"
        # 定制索引名称
                index => "logstash-%{+YYYY.MM.dd}"
        }
}
###

指定配置文件运行

logstash -f /etc/logstash/conf.d/es.conf

查看ES状态

2.5 file输入插件

vim /etc/logstash/conf.d/es.conf

logstash -f /etc/logstash/conf.d/es.conf

查看ES

logstash如何区分设备、文件名、文件的不同版本

  • logstash会把进度保存到sincedb文件中
find / -name .sincedb*
cat /usr/share/logstash/data/plugins/inputs/file/.sincedb_15940cad53dd1d99808eeaecd6f6ad3f

ls -i /var/log/httpd/access_log

sincedb文件内容解释

6个字段:

  1. inode编号
  2. 文件系统的主要设备号
  3. 文件系统的次要设备号
  4. 文件中的当前字节偏移量
  5. 最后一个活动时间戳(浮点数)
  6. 与此记录匹配的最后一个已知路径 

2.6 syslog插入插件

logstash可以伪装成日志服务器,直接接受远程日志

vim /etc/logstash/conf.d/syslog.conf

指定配置文件运行 

logstash -f /etc/logstash/conf.d/syslog.conf

netstat -antulp |grep :514

配置客户端传入日志

vim /etc/rsyslog.conf  # logstash安装在node4 192.168.1.14

systemctl restart rsyslog

查看logstash输出

2.7 多行过滤插件

多行过滤把多行日志记录合并为一行事件

vim /etc/logstash/conf.d/multiline.conf
###
input {
         stdin {
         codec => multiline {
                 pattern => "^EOF"    ##以EOF为结束
                 negate => true
                 what => previous
                 }
         }
 }
 
 output {
         stdout {}
 }
###

指定配置文件运行

logstash -f /etc/logstash/conf.d/multiline.conf

查看输出

2.8 grok过滤插件

grok过滤

vim /etc/logstash/conf.d/grok.conf
###
input {
        stdin {}
}

filter {
        grok {
                match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
        }
}

output {
        stdout {}
}
###

指定配置文件运行

logstash -f /etc/logstash/conf.d/grok.conf

查看输出

  • apache服务日志过滤实战
vim /etc/logstash/conf.d/apache.conf
###
input {
        file {
                path => "/var/log/httpd/access_log"
                start_position => "beginning"
        }
}
filter{
        grok {
                match => { "message" => "%{HTTPD_COMBINEDLOG}" }
        }
}
output {
        elasticsearch {
                hosts => "192.168.1.11:9200"
                index => "apachelog-%{+YYYY.MM.dd}"
        }
}
###

curl 127.0.0.1  ##本地访问两次,生成点日志

指定配置文件运行

logstash -f /etc/logstash/conf.d/apache.conf

查看输出

  • curl访问 

可以看到两条访问记录,且是本机通过curl访问

  • 浏览器访问

3. kibana可视化

3.1 kibana简介

Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图等~

将地理数据融入任何地图

精选的时序性 UI,对Elasticsearch 中的数据执行高级时间序列分析

利用 Graph 功能分析数据间的关系

Kibana 开发工具为开发人员提供了多种强大方法来帮助其与 Elastic Stack 进行交互

3.2 kibana安装与配置

kibana下载

https://elasticsearch.cn/download/

https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/

kibana安装

rpm -ivh kibana-7.7.1-x86_64.rpm

kibana配置

vim /etc/kibana/kibana.yml

启动kibana服务

systemctl enable --now kibana.service

访问kibana

3.3 kibana使用

创建索引匹配

基于ES索引创建可视化

访问量可视化

创建柱状图(访问量排行榜)(客户端ip为x轴)

创建仪表盘(dashboard)

3.4 启用xpack安全验证

集群模式需要先创建证书

cd /usr/share/elasticsearch/ 
./bin/elasticsearch-certutil ca 

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 

cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch 
cd /etc/elasticsearch 
chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12

配置所有的elasticsearch集群节点

vim /etc/elasticsearch/elasticsearch.yml
###
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
###

 ES集群重启正常后,设置用户密码

设置kibana连接ES的用户密码

vim /etc/kibana/kibana.yml

设置Logstash连接ES用户密码

vim /etc/logstash/conf.d/apache.conf 

logstash -f /etc/logstash/conf.d/apache.conf

head访问

  • 添加参数到es配置 
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
  • 浏览器访问http://192.168.1.101:9100/?auth_user=elastic&auth_password=redhat  

  • 利用ab压力测试工具测试访问
ab -c 2 -n 1000 http://192.168.1.14/
  • 查看

  • node3访问

  • 刷新

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值