Linux运维之ELK日志分析平台

elasticsearch实战

elasticsearch简介

Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。
Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎:
一个分布式的实时文档存储,每个字段 可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

基础模块

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

elasticsearch应用场景:

信息检索

日志分析

业务数据分析

数据库加速

运维指标监控

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

elasticsearch安装与配置

软件下载:

https://elasticsearch.cn/download/

安装软件

#rpm -ivh jdk-8u171-linux-x64.rpm
#rpm -ivh elasticsearch-7.6.1.rpm //7.6版本自带jdk

设置服务自启:

#systemctl daemon-reload
#systemctl enable elasticsearch

修改配置文件:

#vim /etc/elasticsearch/elasticsearch.yml

cluster.name: my-es			#集群名称
node.name: server7			#主机名需要解析
path.data: /var/lib/elasticsearch	#数据目录
path.logs: /var/log/elasticsearch	#日志目录
bootstrap.memory_lock: true	#锁定内存分配
network.host: 172.25.0.7		#主机ip
http.port: 9200			#http服务端口
cluster.initial_master_nodes: ["server3"]

修改系统限制

#vim /etc/security/limits.conf

elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch 	   - 	nofile 	65536
elasticsearch	   -	nproc 	4096

#vim jvm.options

-Xms1g
-Xmx1g
Xmx设置不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存。但不要超过32G。

修改systemd启动文件

#vim /usr/lib/systemd/system/elasticsearch.service

[Service]		#在service语句块下添加
LimitMEMLOCK=infinity

#systemctl daemon-reload
#systemctl start elasticsearch

测试

在这里插入图片描述

elasticsearch插件安装

下载elasticsearch-head插件

#wget https://github.com/mobz/elasticsearch-head/archive/master.zip
#unzip elasticsearch-head-master.zip
head插件本质上是一个nodejs的工程,因此需要安装node:
#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

修改ES主机ip和端口

#vim _site/app.js
“http://172.25.0.7:9200”

启动head插件

#npm run start &

修改ES跨域主持

#vim /etc/elasticsearch/elasticsearch.yml

http.cors.enabled: true	# 是否支持跨域
http.cors.allow-origin: "*"	# *表示支持所有域名

重启ES服务

#systemctl restart elasticsearch.service 

访问head插件服务

修改elasticsearch-head下Gruntfile.js文件,默认监听在9100端口:
在这里插入图片描述

创建索引

在这里插入图片描述

查看ES状态

在这里插入图片描述

elasticsearch分布式部署

以相同的方法再安装两个ES节点,配置如下:

节点1:

#grep -v ^# /etc/elasticsearch/elasticsearch.yml

cluster.name: my-es
node.name: server13
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.25.0.13
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.seed_hosts: ["server13", "server14", "server15"]

节点2:

#grep -v ^# /etc/elasticsearch/elasticsearch.yml

cluster.name: my-es
node.name: server14
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.25.0.14
http.port: 9200
discovery.seed_hosts: ["server13", "server14", "server15"]

节点3:

#grep -v ^# /etc/elasticsearch/elasticsearch.yml

cluster.name: my-es
node.name: server15
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.25.0.15
http.port: 9200
discovery.seed_hosts: ["server13", "server14", "server15"]

查看ES集群状态

在这里插入图片描述

elasticsearch节点角色

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

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

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

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

elasticsearch节点优化

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。
默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
节点角色是由以下属性控制:

node.master:  false|true		
node.data:  true|false
node.ingest:  true|false 
search.remote.connect: true|false

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

node.data:这个属性表示节点是否存储数据。
node.ingest: 是否对文档进行预处理。
search.remote.connect:是否禁用跨集群查询
第一种组合:(默认)
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要求较高。

调整后的ES集群状态

在这里插入图片描述

logstash数据采集

logstash简介(续)

Logstash是一个开源的服务器端数据处理管道。
logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是 Elasticsearch。)
Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。
在这里插入图片描述

输入:

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

Logstash安装与配置

软件下载
https://elasticsearch.cn/download/
logstash安装
#rpm -ivh jdk-8u171-linux-x64.rpm
#rpm -ivh logstash-7.6.1.rpm
标准输入到标准输出
/usr/share/logstash/bin/logstash -e ‘input { stdin { } } output { stdout {} }’
在这里插入图片描述

file输出插件

标准输入到文件
#vim /etc/logstash/conf.d/file.conf

input {
        stdin { }
}
output {
        file {
                path => "/tmp/logstash.txt"        	#输出的文件路径
                codec => line { format => "custom format: %{message}"}							#定制数据格式
        }
}

file输出插件(续)

指定配置文件运行
#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf

在标准输入中键入"hello world"后可以查看:
#cat /tmp/logstash.txt

custom format: hello world

elasticsearch输出插件

标准输入到es主机:
#vim /etc/logstash/conf.d/es.conf

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

指定配置文件运行
#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf

查看ES主机
在这里插入图片描述

file输入插件

把文件内容输出到es主机

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

input {
file {
path => “/var/log/messages”
start_position => “beginning”
}
}
output {
elasticsearch {
hosts => “172.25.0.13:9200”
index => “syslog-%{+YYYY.MM.dd}”
template_name => “system_template”
}
}

指定配置文件运行

#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf

查看ES主机

在这里插入图片描述

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

logstash会把进度保存到sincedb文件中
#find / -name .sincedb*
/usr/share/logstash/data/plugins/inputs/file/.sincedb_452905a167cf4509fd08acb964fdb20c
#cd /usr/share/logstash/data/plugins/inputs/file/
#cat .sincedb_452905a167cf4509fd08acb964fdb20c
20297 0 64768 119226 1551859343.6468308 /var/log/messages
#ls -i /var/log/messages
20297 /var/log/messages

sincedb文件内容解释

#cat .sincedb_452905a167cf4509fd08acb964fdb20c
20297 0 64768 119226 1551859343.6468308 /var/log/messages
sincedb文件一共6个字段
inode编号
文件系统的主要设备号
文件系统的次要设备号
文件中的当前字节偏移量
最后一个活动时间戳(浮点数)
与此记录匹配的最后一个已知路径

Syslog输入插件

logstash可以伪装成日志服务器,直接接受远程日志。
#vim /etc/logstash/conf.d/syslog.conf

input {
        syslog {
                type => "rsyslog"
                port => 514		#日志收集端口
        }
}
output {
        stdout { }
}

指定配置文件运行
#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf
#netstat -antulp |grep :514

tcp6       0      0 :::514                  :::*                    LISTEN      3171/java           
udp        0      0 0.0.0.0:514             0.0.0.0:*                           3171/java     

配置客户端传入日志
#vim /etc/rsyslog.conf

*.*         @@172.25.0.13:514    

#systemctl restart rsyslog

查看logstash上的标准输出

在这里插入图片描述

多行过滤插件

多行过滤可以把多行日志记录合并为一行事件
#vim /etc/logstash/conf.d/multiline.conf
input {
stdin {
codec => multiline {
pattern => “^EOF”
negate => true
what => previous
}
}
}

output {
stdout {}
}

多行过滤插件(续)

指定配置文件运行
#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/filter.conf

查看输出

在这里插入图片描述

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 {}
}

指定配置文件运行

#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf

查看输出

55.3.244.1 GET /index.html 15824 0.043

在这里插入图片描述

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 => “172.25.0.13:9200”
index => “apachelog-%{+YYYY.MM.dd}”
}
}

指定配置文件运行

#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf
查看输出
在这里插入图片描述

kibana数据可视化

kibana简介

Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。
在这里插入图片描述

将地理数据融入任何地图
在这里插入图片描述

利用 Graph 功能分析数据间的关系
在这里插入图片描述

Kibana 开发工具为开发人员提供了多种强大方法来帮助其与 Elastic Stack 进行交互。
在这里插入图片描述

kibana安装与配置

kibana下载

https://elasticsearch.cn/download/
#rpm -ivh kibana-7.6.1-x86_64.rpm

kibana配置:

#vim /etc/kibana/kibana.yml
server.port: 5601 #服务端口
server.host: “172.25.0.17” #服务监听地址
elasticsearch.hosts: [“http://172.25.0.13:9200”] #ES集群地址
kibana.index: “.kibana” #kibana在ES中创建的索引
i18n.locale: “zh-CN”

启动kibana服务

#systemctl enable kibana
#systemctl start kibana

#netstat -antlp|grep :5601
tcp 0 0 172.25.0.17:5601 0.0.0.0:* LISTEN 1159/node

访问kibana

在这里插入图片描述

kibana使用

创建索引匹配

在这里插入图片描述

基于ES索引创建可视化

在这里插入图片描述

生成访问量可视化

在这里插入图片描述

创建柱状图(访问量排行榜)

在这里插入图片描述

创建dashboard

在这里插入图片描述

启用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

elasticsearch.username: "kibana"
elasticsearch.password: "westos"

设置Logstash连接ES用户密码:

output {
        elasticsearch {
                hosts => "172.25.0.13:9200"
                index => "apachelog-%{+YYYY.MM.dd}"
		 user => "elastic"
		 password => "westos"
        }
}

head访问

http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type	//添加参数到es配置

http://172.25.0.13:9100/?auth_user=elastic&auth_password=westos

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值