ELK 的工作原理及安装部署

                                                                                                      ELK架构图

                             

 

 

 

 

 

 

elasticsearch 工作原理

ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用.  

  

基本概念:

 

Index

 

定义:类似于mysql中的database。索引只是一个逻辑上的空间,物理上是分为多个文件来管理的。 
命名:必须全小写 
描述:在实践过程中每个index都会有一个相应的 。主要用来在硬件出现问题时,用来回滚数据。这也某种程序上,加剧了ES对于内存高要求

 

Type

 

定义:类似于mysql中的table,根据用户需求每个index中可以新建任意数量的type

 

Document

 

定义:对应mysql中的row。有点类似于MongoDB中的文档结构,每个Document是一个json格式的文本

 

Mapping

 

更像是一个用来定义每个字段类型的语义规范。mysql中类似sql语句,在ES中经过包装后,都被封装为友好的Restful风格的接口进行操作。

 

这一点也是为什么开发人员更愿意使用ES的原因。

 

Shards & Replicas

 

定义:能够为每个索引提供水平的扩展以及备份操作保证了数据的完整性和安全性 
描述: 
Shards:在单个节点中,index的存储始终是有限制,并且随着存储的增大会带来性能的问题。为了解决这个问题,ElasticSearch提供一个能够分割单个index到集群各个节点的功能。你可以在新建这个索引时,手动的定义每个索引分片的数量 
Replicas:在每个node出现宕机或者下线的情况,Replicas能够在该节点下线的同时将副本同时自动分配到其他仍然可用的节点。而且在提供搜索的同时,允许进行扩展节点的数量,在这个期间并不会出现服务终止的情况。 
默认情况下,每个索引会分配5个分片,并且对应5个分片副本,同时会出现一个完整的副本【包括5个分配的副本数据】。

elasticsearch部署

 

前提:关闭防火墙,关闭selinux

 

systemctl stop firewalld

 

setenforce 0

三台机器部署 ELK

系统优化

  • [root@node1 ~]# cat  /etc/security/limits.conf |tail -n 15
  • soft    nproc       65535
  • soft    nofile      65535
  •  
    hard    nproc       65535
  •  
    hard    nofile      65535
  • vi /etc/sysctl.conf  加一行<br>vm.max_map_coun=655360

 

安装es需要jdk环境所以要先安装jdk环境

rpm -ivh  jdk-8u131-linux-x64_.rpm

配置elasticsearch的yum源

[root@node1 ~]# cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
 name=Elasticsearch repository for 6.x packages
 baseurl=https://artifacts.elastic.co/packages/6.x/yum
 gpgcheck=1
 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
 enabled=1
 autorefresh=1
 type=rpm-md

  

yum  -y install elasticsearch

配置开机自启动

[root@node1 ~]# systemctl enable elasticsearch.service

启动服务

[root@node1 ~]# systemctl start elasticsearch.service

验证jdk是否存在

java -version

 验证服务是否启动

ss  -ntl | grep 9200

监听端口:

9200作为Http协议,主要用于外部通讯

9300作为Tcp协议,ES集群之间是通过9300进行通讯

ll /etc/elasticsearch 它的路径

然后进入 vim elasticsearch.yml 配置文件然后修改成,

cluster.name: xxxx   #集群名字

node.name: node-1    # 节点名字

network.host: 192.168.253.225   # 本机ip

http.port: 9200  #服务端口

  

配置完然后重启

systemctl restart elasticsearch 

然后查看端口 是否开启

ss -ntl | grep 9200

检查是否配置成功

curl http//:192.168.253.225:9200  #ip:port

 

elasticsearch配置文件详解:

cluster部分:==========
cluster.name: elasticsearch
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,
如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。 
node部分:===========
node.name: node-1
定义节点名称
node.attr.rack: r1
向节点添加自定义属性
Paths部分:==========
path.data: /var/lib/elasticsearch
设置索引数据的存储路径
path.logs: /var/log/elasticsearch
设置日志文件的存储路径
 
Memory部分:=======
bootstrap.memory_lock: true
启动时锁定内存,为了保证es正常运行 
Network部分:========
network.host: 192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的
http.port: 9200
设置对外服务的http端口,默认为9200。
 
Discovery部分:=======
 
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.minimum_master_nodes:
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。
默认为1,对于大的集群来说,可以设置大一点的值(2-4)
 
Gateway部分:========
gateway.recover_after_nodes: 3
设置集群中N个节点启动时进行数据恢复,默认为1
 
Various部分: [ˈveriəs]=======各种各样====
action.destructive_requires_name: true
删除索引时需要显式名称

  

常用的的命令:

验证服务

常用命令:

验证服务

curl -X GET http://127.0.0.1:9200

elasticsearch 查看集群统计信息

curl -XGET 'http://localhost:9200/_cluster/stats?pretty'

查看集群状态

curl -X GET 'localhost:9200/_cat/health?v'

创建索引:test_index

curl -X PUT HTTP://localhost:9200/test_index?pretty

elasticsearch 查看所有索引

curl -X GET HTTP://localhost:9200/_cat/indices?v

删除索引:test_index

curl -XDELETE 'localhost:9200/test_index?pretty'

 

 

logstash 的工作原理

 

Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。

 

支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型

 

Input模块:输入数据到logstash

 

一些常用的输入为:

 

file:从文件系统的文件中读取,类似于tail-f命令

 

redis:从redis service中读取

 

beats:从filebeat中读取

 

kafka:kafka队列中读取

 

Filters:数据中间处理,对数据进行操作。

 

一些常用的过滤器为:

 

grok:解析任意文本数据Grok Logstash 最重要的插件。

 

它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。内置120多个解析语法。

 

官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在线调试:https://grokdebug.herokuapp.com/

 

mutate [ˈmjuːteɪt]:对字段进行转换。

 

例如对字段进行删除、替换、修改、重命名等。

 

drop:丢弃一部分events不进行处理。

 

clone:拷贝 event,这个过程中也可以添加或移除字段。

 

geoip:添加地理信息(为前台kibana图形化展示使用)

 

Outputs模块:outputslogstash处理管道的最末端组件。

 

一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

 

一些常见的outputs为:

 

elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

 

file:将event数据保存到文件中。

 

graphite [ˈɡræfaɪt]:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。

 

Codecs模块:codecs 是基于数据流的过滤器,它可以作为inputoutput的一部分配置Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

一些常见的codecs:

json:使用json格式对数据进行编码/解码。

multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息。

 

 

 

 

 

 

logstash 部署

配置logstash的yum源

[logstash-6.x]
name=Elastic repository for 6.x packages
 baseurl=https://artifacts.elastic.co/packages/6.x/yum
 gpgcheck=1
 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
 enabled=1
 autorefresh=1
 type=rpm-md

  

yum -y install logstash

配置文件路径

ll /etc/logstash

[root@localhost logstash]# pwd

/var/log/logstash

 

[root@localhost logstash]# ll

 

total 4

 

-rw-r--r--. 1 logstash logstash 1644 Nov  7 02:36 logstash-plain.log

 

-rw-r--r--. 1 logstash logstash    0 Nov  7 02:35 logstash-slowlog-plain.log
logstash是用来收集日志,并对日志做过滤处理的,我们下面要分析的是系统日志,所以要编写一个收集日志的配置文件
 
vim /etc/logstash/conf.d/system.conf
input日志输入模块:日志的获取方式和路径input {
    file {
       path => "/var/log/messages"
       type => "system-log"
       start_position => "beginning"
    }
}
output日志的输出模块:导出你的数据
output {
    elasticsearch {
      hosts => "192.168.10.129:9200"
      index => "system_log-%{+YYYY.MM.dd}"
    }
}

  


 

 

这里为了测试,将/var/log/messages日志的权限修改为了644

 

chmod 777 /var/log/messages

如果conf.d 下有多个配置文件需要修改pipelines.yml(管道)文件

- pipeline.id: main

  path.config: "/etc/logstash/conf.d/system.conf"
- pipeline.id: sec
  path.config: "/etc/logstash/conf.d/messages.conf"

  


配置开机自启动

 [root@localhost ~]# systemctl enable logstash.service 
启动logstash服务
[root@localhost ~]# systemctl start logstash.service

查看端口 

ss  -ntl  | grep 9600

 

 

kibana 工作原理:

kibana  就是个ui页面就是用来创建索引和查看日志的变动和日志的各种趋势图。

kibana 部署:

配置kibana的yum 源

[kibana-6.x]
name=Kibana repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

  

开机自启动
 systemctl enable kibana.service
启动服务
systemctl start kibana

这里只需要配置监听地址和elasticsearch的ip就可以了

vim /etc/kibana/kibana.yml

[root@localhost yum.repos.d]# cat /etc/kibana/kibana.yml |grep -v "^#"
server.port: 5601       #端口
server.host: "0.0.0.0"   # 本机ip
elasticsearch.hosts: ["http://192.168.10.129:9200"]         #elasticsearch的ip和端口

 

 

重启启动服务:

Systemctl restart kibana

监听端口

ss -ntl | grep  5601

 在kibana上创建索引

 

 

 

  给系统日志添加可视化图形

 

  选择创建图形类型为线形图

 

  选择绘画哪个索引的图形

 

  选择x轴为绘画日期的柱状图,然后点击开始获取数据

 

 

 

 

 

 

 欢迎进群讨论:QQ群294668383(有意向可以添加)

 

 

 

posted @ 2020-03-07 10:00  AI_运维_攻城狮  阅读(476)  评论(0)    收藏  举报