ELK———( Elasticsearch + Logstash + Kibana )


ELk 集群组件、及组件功能

Logstash—-收集日志 ———>>> ES—-搜索、分析日志 ———>>> Kibana—-页面展示

一、Logstash 6.5.4版本 开源

对日志进行收集、过滤并存储供以后使用,他的工作流程分为三个阶段:输入、过滤、输出。每个阶段都有强大的插件提供支持

1、工作流程

  1. 1、输入(Input)负责产生事件,常用的插件有
  2. file:从文件系统收集数据
  3. syslog:从syslog日志收集数据
  4. redis:从redis收集日志
  5. beats:从beats family收集日志(如:Filebeats
  6. 2Filter常用的插件,负责数据处理与转换
  7. groklogstash中最常用的日志解释和结构化插件。:grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。
  8. mutate 支持事件的变换,例如重命名、移除、替换、修改等
  9. drop 完全丢弃事件
  10. clone 克隆事件
  11. 3、输出(output)负责数据输出,常用的插件有
  12. ES把数据输出到ES
  13. file 把数据输出为普通的文件

2、Logstash部署依赖,及日志收集配置

Logstash运行依赖jdk(JAVA),可以在 /etc/profile 下配置JAVA环境变量

Logstash收集日志的格式是  json 格式
例:收集 nginx 日志
           需要将 nginx 原来的日志格式注释掉,重新定义成json格式:
                              log_format  json '{"@timestamp":"$time_iso8601",'
                                                             '"@version":"1",'
                                                             '"client":"$remote_addr",'
                                                             '"url":"$uri",'
                                                             '"status":"$status",'
                                                             '"domain":"$host",'
                                                             '"host":"$server_addr",'
                                                             '"size":$body_bytes_sent,'
                                                             '"responsetime":$request_time,'
                                                             '"referer": "$http_referer",'
                                                             '"ua": "$http_user_agent"'
                                                       '}';
      引用定义的json格式的日志:
      access_log  /var/log/nginx/access_json.log  json;

source /etc/rpofile -------重新加载配置文件命令
Java -version---------查看JAVA的版本

二、ES(Elasticsearch)6.5.4版本 开源

1、ES组件功能及特点

ES 对日志搜索、分析

特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,多数据源等。

它提供了一个分布式多用户能力的全文搜索引擎。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布
设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在elasticsearch集群中,所有节点的数据是均等的。
索引自动分片(一旦创建了索引,就不能更改主分片的数量)
索引(库)—>类型(表)—>文档/日志(记录)

2、ES 部署的依赖、配置项及优化

   1、ES 运行依赖JDK(JAVA)<br />       2、在 ES 的 config 配置文件夹里添加如下内容 vim elasticsearch.ym
cluster.name: elk
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
#discovery.zen.ping.unicast.hosts: ["IP地址", "IP地址","IP地址"]
#discovery.zen.minimum_master_nodes: 2
#discovery.zen.ping_timeout: 150s
#discovery.zen.fd.ping_retries: 10
#client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
        配置项的含义
cluster.name                     集群名称,各节点配成相同的集群名称。
node.name                        节点名称,各节点配置不同。
node.master                      指示某个节点是否符合成为主节点的条件。
node.data                        指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data                        数据存储目录。
path.logs                        日志存储目录。
bootstrap.memory_lock            内存锁定,是否禁用交换。
bootstrap.system_call_filter     系统调用过滤器。
network.host                     绑定节点IP。
http.port       端口。
discovery.zen.ping.unicast.hosts      提供其他 Elasticsearch 服务节点的单点广播发现功能。
discovery.zen.minimum_master_nodes    集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。
discovery.zen.ping_timeout            节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries         节点发现重试次数。
http.cors.enabled                     是否允许跨源 REST 请求,用于允许head插件访问ES。
http.cors.allow-origin                允许的源地址。

修改JVM堆大小
vim jvm.options
-Xms1g    ----修改成 -Xms2g
-Xmx1g    ----修改成 -Xms2g

3、系统优化
(1)增加最大文件打开数

echo "* - nofile 65536" >> /etc/security/limits.conf

(2)增加最大进程数

vim /etc/security/limits.conf    ---在文件最后面添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
更多的参数调整可以直接用这个

解释:
soft  xxx  : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard  xxx  : 代表严格的设定,不允许超过这个设定的值。
nofile : 是每个进程可以打开的文件数的限制
nproc  : 是操作系统级别对每个用户创建的进程数的限制

(3)增加最大内存映射数(调整使用交换分区的策略)

vim /etc/sysctl.conf   ---添加如下
vm.max_map_count=262144
vm.swappiness=0
[root@mes-1 ~]# sysctl -p
解释:在内存不足的情况下,使用交换空间。

sysctl -w vm.max_map_count=262144
增大用户使用内存的空间(临时)

三、Kibana 6.5.4版本 开源

     Kibana 是一个基于浏览器页面的 ES 前端展示工具。Kibana可以为 Logstash 和 ES 提供的日志分析和友好的 Web 界面,帮你汇总、分析和搜索重要数据日志。<br />1、Kibana 配置
cd /usr/local/kibana-6.5.4-linux-x86_64/config/
vim kibana.yml
server.port: 5601
server.host: "本机地址"                              #kibana本机的地址
elasticsearch.url: "http://节点地址:9200"              #ES主节点地址+端口
kibana.index: ".kibana"
 配置项含义
server.port kibana 服务端口,默认5601
server.host kibana 主机IP地址,默认localhost
elasticsearch.url  用来做查询的ES节点的URL,默认http://localhost:9200
kibana.index       kibana在Elasticsearch中使用索引来存储保存的searches, visualizations和dashboards,默认.kibana

EFK(Filebeat+Elasticsearch+kibana)

1、Filebeat 功能简介 6.5.4版本

隶属于 Beats,轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat 就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择,目前Beats 包含四种工具:

  • 1.Packetbeat(搜集网络流量数据)
  • 2.Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。)
  • 3.Filebeat(搜集文件数据)
  • 4.Winlogbeat(搜集 Windows 日志数据)

    2、Filebeat 和 Logstash 对比

    Logstash 和 Filebeat 都具有日志收集功能

    Filebeat:更轻量级,占用资源更少,没有 Filter(过滤分析)功能、需要部署在每台应用服务器上

    Logstash:是跑在 JVM 上的,资源消耗比较大,有 Filter(过率分析)功能

    3、Filebeat 配置

    修改 Filebeat 配置,支持收集本地目录日志,并输出日志到 Kafka 集群中
vim filebeat.yml
filebeat.prospectors:
- input_type: log        #指定输入的类型
  paths:
    -  /var/log/nginx/*.log      #日志的路径
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log

output.kafka:
  hosts: ["IP地址:9092","IP地址:9092","IP地址:9092"]   #kafka服务器
  topic: 'nginx'        #输出到kafka中的topic

注释:
下面三行配置,只针对于收集json格式的日志,如收集的不是json格式,可以擦除
json.keys_under_root: true #keys_under_root可以让字段位于根节点,默认为false
json.add_error_key: true #将解析错误的消息记录储存在error.message字段中
json.message_key: log #message_key是用来合并多行json日志使用的

Kafka 数据缓冲队列

数据缓冲队列(消息队列)。同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃
是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批量处理系统、低延迟的实时系统、web/nginx日志、访问日志,消息服务等

Kafka特性:

  • 高吞吐量:kafka每秒可以处理几十万条消息。
  • 可扩展性:kafka集群支持热扩展- 持久性、
  • 可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  • 高并发:支持数千个客户端同时读写
    话题(Topic):是特定类型的消息流。(每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的)
    生产者(Producer):是能够发布消息到话题的任何对象(发布消息到 kafka 集群的终端或服务).
    消费者(Consumer):可以订阅一个或多个话题,从而消费这些已发布的消息。
    服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群。
    partition(区):每个 topic 包含一个或多个 partition。
    replication:partition 的副本,保障 partition 的高可用。
    leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
    follower:replica 中的一个角色,从 leader 中复制数据。
    zookeeper:kafka 通过 zookeeper 来存储集群的信息。
    

集群架构(Filebeat+Kafka+Logstash+ES+Kibana)

E   L   K 陈铎 - 图1

Filebeat安装在要收集日志的应用服务器中,

Filebeat收集到日志之后传输到kafka中,

logstash通过kafka拿到日志,

在由logstash传给后面的es,

es将日志传给后面的kibana,最后通过kibana展示出来。