ELK +filebeat+redis(7.15.1-1)

最近发现ELK页面等有了较大的改动,重新配置了遍最新版

注:软件版本必须一致,这里配置现发布的最新版本 7.15.1-1
注:conf文件中格式使用空格,空2格,不要用tab 不要用tab 不要用tab

1.配置JDK环境 (略)

#################以下为 直接使用logstash获取日志#################

2.安装配置elasticsearch.x86_64

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

[root@localhost yum.repos.d]# yum clean all 
[root@localhost yum.repos.d]# yum makecache fast

[root@localhost yum.repos.d]# yum -y install elasticsearch.x86_64
[root@localhost /]# systemctl enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@localhost /]# systemctl start elasticsearch 
[root@localhost /]# systemctl status  elasticsearch 
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2021-11-03 17:04:35 CST; 7s ago
     Docs: https://www.elastic.co
 Main PID: 15439 (java)
   CGroup: /system.slice/elasticsearch.service
           ├─15439 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava....
           └─15638 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

11月 03 17:04:20 localhost.localdomain systemd[1]: Starting Elasticsearch...
11月 03 17:04:35 localhost.localdomain systemd[1]: Started Elasticsearch.

[root@localhost /]# netstat -ntlp |grep java
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      15439/java          
tcp6       0      0 ::1:9200                :::*                    LISTEN      15439/java          
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      15439/java          
tcp6       0      0 ::1:9300                :::*                    LISTEN      15439/java      
#9200作为Http协议,主要用于外部通讯
#9300作为Tcp协议,ES集群之间是通过9300进行通讯

[root@localhost /]# vim /etc/elasticsearch/elasticsearch.yml 
[root@localhost /]# cat /etc/elasticsearch/elasticsearch.yml | grep -v '^#'
cluster.name: elk001
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 10.2.33.102
http.port: 9200
discovery.seed_hosts: ["10.2.33.102", "[::1]"]
cluster.initial_master_nodes: ["node-1"]

[root@localhost /]# systemctl restart elasticsearch
[root@localhost ~]# curl http://10.2.33.102:9200
{
  "name" : "node-1",
  "cluster_name" : "elk001",
  "cluster_uuid" : "hTUer8_jQRSYE-cwg55mSw",
  "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
配置说明
属性名 说明
cluster.name 配置elasticsearch的集群名称。
node.name 节点名,es会默认随机指定一个名字,用户可自行配置。
path.data 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号分隔。
path.logs 设置日志文件的存储路径,默认是es根目录下的logs文件夹。
path.conf 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在
path.plugins 设置插件的存放路径,默认是es根目录下的plugins文件夹。
bootstrap.memory_lock 设置为true可以锁住ES使用的内存,避免内存进行swap。
network.host 设置bind_host和publish_host,设置为0.0.0.0允许所有外网访问。
http.port 设置对外服务的http端口,默认为9200。
transport.tcp.port 集群结点之间通信端口,默认为9300。
discovery.zen.ping.timeout 设置ES自动发现节点连接超时的时间,默认为3S。
discovery.zen.minimum_master_nodes 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。
discovery.seed_hosts 集群发现,配置该节点会与哪些候选地址进行通信,hostname,ip,ip+port,比如:[“127.0.0.1:9300”]。
cluster.initial_master_nodes 当你第一次启动全新的Elasticsearch集群时,会有一个集群引导(cluster bootstrapping)步骤,这个步骤会确定一个在第一次选举中投票被计数的、并且可以成为master节点的集合。在开发模式,如果没有配置 discovery settings,该步骤由节点自身自动执行。因为这种自动引导本质上是不安全的,当您在生产模式下启动一个全新的集群时,你必须显式指定那些可以成为master节点的名称或者IP地址,这些节点应该在第一次选举中计算选票数。

3.安装配置logstash.x86_64

logstash目录结构

类型 描述 默认值 如何定义配置
home logstash安装的默认主目录 /usr/share/logstash
bin logstash的二进制脚本程序和logstash-plugin插件安装脚本 /usr/share/logstash/bin
settings 配置文件,包括logstash.yml、jvm选项配置、启动选项配置 /etc/logstash path.settings
conf logstash数据收集配置 /etc/logstash/conf.d/*.conf /etc/logstash/pipelines.yml
logs 日志文件 /var/log/logstash path.logs
plugins 插件目录 /usr/share/logstash/plugins path.plugins
data 数据持久化目录 /var/lib/logstash path.data

logstash配置文件

logstash.yml:定义logstash的基础配置信息(启动和执行)
pipeline.yml:定义数据收集规则的配置信息(配置处理流水线数据)
jvm.options:定义JVM的总堆空间的最小值和最大值,也就是内存使用量,默认是1g
log4j2.properties:log4j2库的相关设置
startup.options:定义logstash启动时的相关配置

logstash.yml的详解:

配置参数 解析 默认值
node.name 节点名称定义 主机名
path.data 持久化数据目录定义 LOGSTASH_HOME/data
pipeline.id pipeline的id号 main
pipeline.java_execution 使用java执行引擎 false
pipeline.workers 定义在过滤筛选和输出阶段的进程数量 默认为cpu的核心数
pipeline.batch.size 定义在筛选和输出之前单次处理数据量大小,通常和jvm的堆内存值相关,值越大,jvm内存配置也需要更大 125
pipeline.batch.delay 批处理数据的时间延迟,在数据量不达标时的延迟时间,单位为毫秒 50
pipeline.unsafe_shutdown 在关机状态强制关闭logstash在处理的数据,会导致数据丢失 false
path.config pipeline的相关配置,通常在pipeline.yml中配置好
http.host 监听配置 "127.0.0.1"
http.port 监听端口 9600
path.logs 日志路径 LOGSTASH_HOME/logs
log.format 日志格式 文本
path.plugins 插件定义

安装步骤&事例如下:

[root@localhost yum.repos.d]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@localhost yum.repos.d]# cat logstash.repo 
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


[root@localhost /]# yum -y install logstash.x86_64
[root@localhost /]# cat /etc/logstash/conf.d/system.conf 
input{
  file {
    path => "/data/rsync/nginx/*"
    type => "nginxlog"
    start_position => "beginning"
    stat_interval => "3"
  }
  file{
    path => "/var/log/secure"
    type => "securelog"
    start_position => "beginning"
    stat_interval => "2"
  }
}
output {
  if [type] == "nginxlog" {
    elasticsearch{
      hosts => ["10.2.33.102:9200"]
      index => "nginx-%{+YYYY.MM.dd}"
    }
  }
  if [type] == "securelog" {
    elasticsearch{
      hosts => ["10.2.33.102:9200"]
      index => "secure-%{+YYYY.MM.dd}"
    }
  }
}

[root@localhost /]# chmod -R 777 /var/log/messages 
[root@localhost /]# systemctl enable logstash 
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@localhost /]# systemctl start  logstash 
[root@localhost /]# systemctl status   logstash 
● logstash.service - logstash
   Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2021-11-03 17:41:57 CST; 5s ago
 Main PID: 18344 (java)
   CGroup: /system.slice/logstash.service
           └─18344 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.comp...

11月 03 17:41:57 localhost.localdomain systemd[1]: Started logstash.
11月 03 17:41:57 localhost.localdomain systemd[1]: Starting logstash...
11月 03 17:41:57 localhost.localdomain logstash[18344]: Using bundled JDK: /usr/share/logstash/jdk
11月 03 17:41:57 localhost.localdomain logstash[18344]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[root@localhost /]# netstat -ntlp |grep java 
tcp6       0      0 127.0.0.1:9600          :::*                    LISTEN      18344/java          
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      15439/java          
tcp6       0      0 ::1:9200                :::*                    LISTEN      15439/java          
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      15439/java          
tcp6       0      0 ::1:9300                :::*                    LISTEN      15439/java  

4.安装配置kibana.x86_64

[root@localhost /]# yum -y install kibana.x86_64
[root@localhost /]# cat /etc/kibana/kibana.yml |grep -v "^#" |grep -v "^$"
server.port: 5601
server.host: "10.2.33.102"
elasticsearch.hosts: ["http://10.2.33.102:9200"]

[root@localhost /]# systemctl enable kibana
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
[root@localhost /]# systemctl start  kibana
[root@localhost /]# systemctl status  kibana
● kibana.service - Kibana
   Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2021-11-03 17:48:32 CST; 3s ago
     Docs: https://www.elastic.co
 Main PID: 18942 (node)
   CGroup: /system.slice/kibana.service
           ├─18942 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist --logging.dest="/var/log/kibana/kibana.log" --pid.file="/run/kibana/kibana.pid"
           └─18955 /usr/share/kibana/node/bin/node --preserve-symlinks-main --preserve-symlinks /usr/share/kibana/src/cli/dist --logging.dest="/var/log/kibana/kibana.log" --pid.file="/run/kibana/kibana.pid"

11月 03 17:48:32 localhost.localdomain systemd[1]: Started Kibana.
11月 03 17:48:32 localhost.localdomain systemd[1]: Starting Kibana...
[root@localhost /]# netstat -ntlp |grep 5601
tcp        0      0 10.2.33.102:5601        0.0.0.0:*               LISTEN      18955/node 

5.登陆配置
http://10.2.33.102:5601

ELK +filebeat+redis(7.15.1-1)_第1张图片

ELK +filebeat+redis(7.15.1-1)_第2张图片

ELK +filebeat+redis(7.15.1-1)_第3张图片

 #################以下为用filebeat获取日志,传输#################

1、需要在客户端服务器上安装filebeat,采集传输日志文件
yum源repo同上略过
[root@localhost /]# yum -y install filebeat.x86_64

[root@localhost nginx]# cat /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/*.log
  tags: ["nginx-web"]
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.elasticsearch:
  hosts: ["localhost:9200"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
# ================================== Logging ===================================
#logging.level: debug
# ============================= X-Pack Monitoring ==============================
#monitoring.enabled: false
# ============================== Instrumentation ===============================
#instrumentation:
    #enabled: false
    #hosts:
    #  - http://localhost:8200
    #api_key:
# ================================= Migration ==================================
#migration.6_to_7.enabled: true

配置文件详解:

type: log #input类型为log
enable: true #表示是该log类型配置生效
paths:     #指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:
- /var/log/* /*.log  #则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。
recursive_glob.enabled: #启用全局递归模式,例如/foo/**包括/foo, /foo/*, /foo/*/*
encoding:#指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
exclude_lines: ['^DBG'] #不包含匹配正则的行
include_lines: ['^ERR', '^WARN']  #包含匹配正则的行
harvester_buffer_size: 16384 #每个harvester在获取文件时使用的缓冲区的字节大小
max_bytes: 10485760 #单个日志消息可以拥有的最大字节数。max_bytes之后的所有字节都被丢弃而不发送。默认值为10MB (10485760)
exclude_files: ['\.gz$']  #用于匹配希望Filebeat忽略的文件的正则表达式列表
ingore_older: 0 #默认为0,表示禁用,可以配置2h,2m等,注意ignore_older必须大于close_inactive的值.表示忽略超过设置值未更新的
文件或者文件从来没有被harvester收集
close_* #close_ *配置选项用于在特定标准或时间之后关闭harvester。 关闭harvester意味着关闭文件处理程序。 如果在harvester关闭
后文件被更新,则在scan_frequency过后,文件将被重新拾取。 但是,如果在harvester关闭时移动或删除文件,Filebeat将无法再次接收文件
,并且harvester未读取的任何数据都将丢失。
close_inactive  #启动选项时,如果在制定时间没有被读取,将关闭文件句柄
读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间
如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被启动
建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不同更新速度的日志文件
使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开始倒计时使用2h 5m 来表示
close_rename #当选项启动,如果文件被重命名和移动,filebeat关闭文件的处理读取
close_removed #当选项启动,文件被删除时,filebeat关闭文件的处理读取这个选项启动后,必须启动clean_removed
close_eof #适合只写一次日志的文件,然后filebeat关闭文件的处理读取
close_timeout #当选项启动时,filebeat会给每个harvester设置预定义时间,不管这个文件是否被读取,达到设定时间后,将被关闭
close_timeout 不能等于ignore_older,会导致文件更新时,不会被读取如果output一直没有输出日志事件,这个timeout是不会被启动的,
至少要要有一个事件发送,然后haverter将被关闭
设置0 表示不启动
clean_inactived #从注册表文件中删除先前收获的文件的状态
设置必须大于ignore_older+scan_frequency,以确保在文件仍在收集时没有删除任何状态
配置选项有助于减小注册表文件的大小,特别是如果每天都生成大量的新文件
此配置选项也可用于防止在Linux上重用inode的Filebeat问题
clean_removed #启动选项后,如果文件在磁盘上找不到,将从注册表中清除filebeat
如果关闭close removed 必须关闭clean removed
scan_frequency #prospector检查指定用于收获的路径中的新文件的频率,默认10s
tail_files:#如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,
而不是从文件开始处重新发送所有内容。
symlinks:#符号链接选项允许Filebeat除常规文件外,可以收集符号链接。收集符号链接时,即使报告了符号链接的路径,
Filebeat也会打开并读取原始文件。
backoff: #backoff选项指定Filebeat如何积极地抓取新文件进行更新。默认1s,backoff选项定义Filebeat在达到EOF之后
再次检查文件之间等待的时间。
max_backoff: #在达到EOF之后再次检查文件之前Filebeat等待的最长时间
backoff_factor: #指定backoff尝试等待时间几次,默认是2
harvester_limit:#harvester_limit选项限制一个prospector并行启动的harvester数量,直接影响文件打开数

tags #列表中添加标签,用过过滤,例如:tags: ["json"]
fields #可选字段,选择额外的字段进行输出可以是标量值,元组,字典等嵌套类型
默认在sub-dictionary位置
filebeat.inputs:
fields:
app_id: query_engine_12
fields_under_root #如果值为ture,那么fields存储在输出文档的顶级位置

multiline.pattern #必须匹配的regexp模式
multiline.negate #定义上面的模式匹配条件的动作是 否定的,默认是false
假如模式匹配条件'^b',默认是false模式,表示讲按照模式匹配进行匹配 将不是以b开头的日志行进行合并
如果是true,表示将不以b开头的日志行进行合并
multiline.match # 指定Filebeat如何将匹配行组合成事件,在之前或者之后,取决于上面所指定的negate
multiline.max_lines #可以组合成一个事件的最大行数,超过将丢弃,默认500
multiline.timeout #定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发送日志,默认是5s
max_procs #设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量。
name #为该filebeat指定名字,默认为主机的hostname

注:/etc/logstash/conf.d 下可配置多个文件
2、在logstash上配置第二个nginx.conf 接收filebeat传输过来的数据

[root@elk001 conf.d]# pwd
/etc/logstash/conf.d

[root@elk001 conf.d]# ll
总用量 8
-rw-r--r-- 1 root root 174 11月  8 16:54 nginx.conf
-rw-r--r-- 1 root root 538 11月  8 16:29 system.conf
[root@elk001 conf.d]# cat nginx.conf 
input{
  beats{
    host => "10.2.33.102"
    port => "5044"
  }
}
output {
  elasticsearch{
    hosts => ["10.2.33.102:9200"]
    index => "nginx-web-%{+YYYY.MM.dd}"
  }
}

[root@elk001 conf.d]# systemctl restart logstash 

3、登陆http://10.2.33.102:5601查看新增的文件

ELK +filebeat+redis(7.15.1-1)_第4张图片

#################filebeat-redis-logstash-elasticsearch-kibana #################

架构图:

ELK +filebeat+redis(7.15.1-1)_第5张图片

 说明:(测试就把除了filebeat都装一台上了,生产环境请自分配)
  1,前端服务器只启动轻量级日志收集工具filebeat(不需要JDK环境)
  2,收集的日志不经过处理直接发送到redis消息队列
  3,redis消息队列只是暂时存储日志数据,不需要进行持久化(防止数据丢失)
  4,logstash从redis消息队列读取数据并且按照一定规则进行过滤然后存储至elasticsearch
  5,通过kibana进行图形化展示

redis在其中的作用:
存储日志,全部日志集中一起,打好标签,便于操作管理,可以是nginx,apache,tomcat等其他只要产生都可以存储,只要打上标签,logstash在input时就会分好类
提高冗余性,若redis后面的全部宕机了,也不至于数据丢失
加快日志的读取速度,防止大批量日志的时候logstash无法及时处理

redis配置安装(略)

bind 0.0.0.0
protected-mode no
requirepass redis123456

一些配置上面已有,忽略,直接修改配置文件,如下:
修改filebeat配置文件,redis作为日志的输出对象,需要添加,放置不同的redis库,设置不同的key方便使用

[root@localhost filebeat]# cat /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/*.log
  tags: ["nginx-web"]
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.redis:
  hosts: ["10.2.33.102:6379"]
  password: "redis123456"
  key: "nginx-web"
  data_type: "list"
  db: 4
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
# ================================== Logging ===================================
#logging.level: debug
# ============================= X-Pack Monitoring ==============================
#monitoring.enabled: false
# ============================== Instrumentation ===============================
#instrumentation:
    #enabled: false
    #hosts:
    #  - http://localhost:8200
    #api_key:
# ================================= Migration ==================================
#migration.6_to_7.enabled: true

修改logstash配置文件,根据filebeat中设置的redis存储进行读取:

[root@elk001 conf.d]# cat redis.conf 
input{
  redis {
    host => "10.2.33.102"
    port => 6379
    password => "redis123456"
    key => "nginx-web"
    data_type => "list"
    db => 4
  }
}
output {
  elasticsearch {
    hosts => ["10.2.33.102:9200"]
    index => "redis-%{+YYYY.MM.dd}"
  }
}

注:修改配置文件注意要重启服务

redis查看数据

[root@elk001 conf.d]# redis-cli 
127.0.0.1:6379> auth redis123456
OK
127.0.0.1:6379> select 4
OK
127.0.0.1:6379[4]> keys *
1) "nginx-web"


登陆验证:
ELK +filebeat+redis(7.15.1-1)_第6张图片

 

#################filebeat-kafka-logstash-elasticsearch-kibana #################

未完待续。。。

你可能感兴趣的:(elk,elk)