es 部署

部署操作

1 环境准备

 1.1 修改host 主机名,加入hosts解析

  # hostnamectl set-hostname es1

  # cat >> /etc/hosts << EOF

  192.168.234.160 es1
  EOF

1.2 关闭防火墙

  # systemctl stop firewalld

  # systemctl disable firewalld

1.3 禁用selinux

  # sed -ri 's#(SELINUX=)enforcing#\1disabled#' /etc/selinux/config

  # grep ^SELINUX= /etc/selinux/config

  # setenforce 0

1.4 配置免密登录

  # ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q

  # for ((i=160;i<=162;i++));do ssh-copy-id 192.168.234.${i};done

1.5 安装数据同步工具rsync , 用于之后实验的数据快速同步

  # yum install rsync -y

   # rsync  -az  filename   ip:/path/

1.6 时间同步

   #yum install -y ntpdate chrony

这里同步aliyun的时间服务器

   # vim /etc/chrony.conf

  server ntp.aliyun.com iburst
  server ntp1.aliyun.com iburst
  server ntp2.aliyun.com iburst
  server ntp3.aliyun.com iburst
  server ntp4.aliyun.com iburst

  # systemctl start chronyd

2 es 部署

2.1 下载地址:# https://www.elastic.co/cn/downloads/elasticsearch

rpm包安装

# yum localinstall elasticsearch-7.17.3-x86_64.rpm -y  

启动服务

systemctl start elasticsearch.service

默认监控在9200和9300端口,9200是服务对外提供服务, 9300是集群之间通信的

配置修改

#vim  /etc/elasticsearch/elasticsearch.yml

cluster.name: my-application   集群名称

node.name: es1   节点名称

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch  日志路径

network.host:  0.0.0.0    监控地址

http.port: 9200   监听端口

discovery.seed_hosts: ["host1", "host2"]    集群节点发现列表这里域名如果报错的话可以用ip代替

cluster.initial_master_nodes: ["es1"]    集群节点列表

查看服务状态

 #curl 192.168.234.160:9200/_cat/nodes?v

3 kibana 部署

3.1 下载部署包,注意要与es 版本一直

# yum localinstall  kibana-7.17.3-x86_64.rpm -y  

修改配置文件

# vim  /etc/kibana/kibana.yml

server.host: 0.0.0.0    绑定所有ip地址

elasticsearch.hosts : ["http://ip:9200"]   配置es 节点的ip端口,如果是集群,这写多个节点的

i18n.locale: "zh-CN"    设定语言中文

启动服务  监听端口默认5601

#systemctl  start  kibana  

3.2 kibana使用

页面通过堆栈检测  可以获取es 集群状态检测数据,

通过stack Management - 索引管理  可以看到所有的索引数据

4 logstash 部署

下载对应版本安装包

# yum localinstall  logstash-7.17.3-x86_64.rpm -y 

# ln -s /usr/share/logstash/bin/logstash  /usr/local/bin/   做一个软连接,可以直接生效logstash命令

4.2 配置修改

 input {                      输入

    tcp {                        如tcp的999端口监听

    type =>  "name"  写一个标记名, 用于后面输出匹配不同的索引

    pront => 9999

  }

}  

  output {             输出

  stdout {}

  if [type] == "name" {   # 根据标记分配不同的索引,输出到es

    elasticsearch  {

    hosts => ["127.0.0.1:9200"]

    指定的索引

    index => "name-%{+YYYY.MM.dd}"

    }

  }else if [type] == "" {

   elasticsearch  {

   hosts => ["127.0.0.1:9200"]

   index => ""

    }

  }else {

    elasticsearch  {

    hosts => ["127.0.0.1:9200"]

    index => ""

    }

  }

  #如输出到redis

  redis {

    host => "127.0.0.1"

    port  =>  "6379"

    db =>   10  数据库编号

    password =>  "1232"  密码

    data_type  =>  “list”   写入的数据类型

    key  =>  “name”  指定key的名称

  }

   file {}    输出到文件

   elasticsearch {   # 输出到es

    hosts => ["127.0.0.1:9200"]

    index =>  ""               #定义索引   

  } 

}

# logstash  -tf   **.conf    测试配置文件是否正常

配置参考:https://www.elastic.co/guide/en/logstash/8.5/index.html

5 filebeat  组件配置

#指定输入类型

filebeart.inputs:

-  type : stdin    # 指定输入的类型为标准输入

enabled : false   # 禁用这个type类型 , 默认是true

- type :log   # 指定输入类型为log类型

  paths :   # 指定路径    

   -  /var/log/*.log     # 收集此目录下的所有日志文件

  tags : ["json"]      # 打标签 后面在输出到不通的索引可以根据此做判断

  json.keys_under_root:  true         # 根据日志的json格式定义,对日子进行字段的拆分,方便直接查看对应字段的值

  fields:                 # 自定义数据信息

     school :“北京”

# 指定输出的类型

output.console:

       pretty : true    #打印漂亮的格式  

output.elasticsearch:           # 输出到es

    hosts: ["http://ip:port"]      

    index : “%{[fields.log_type]}-%{[agent-version]}-%{+yyyt.MM.dd}”            # 指定索引, 若不指定默认是filebeat-开头, 索引是es的存储单元

     index:   "oldboy-%{+yyyy.MM.dd}"

    #定义多个索引

    indices:

      -  index : “oldboy”

        when.contains :         # 根据tag的不同分配到不同的索引

             tags : "oldby"         

      - index : “python”

         when.contains :         # 根据tag的不同分配到不同的索引

              tags : "pyhon" 

setup.ilm.enabled : false                      # 禁用索引管理, 这样自定义索引才科生效

setup.template.name :  "oldboy"   # 创建一个索引模板

setup.template.pattern : "oldboy*"  # 模板的匹配规则

#覆盖已有的索引模板

setup.template.overwrite :  false

#配置模板

setup.template.settings :

    index.number_of_shards : 3    #设定分片数  默认1

    index.number_of_replicas : 3   # 设定副本数   默认1  , 设定副本的数量要小于集群节点的数量 , 否则es集群状态时yellow , 副本是只读

运行filebeat :

# filebeat  -e  -c   /etc/filebeat/conf.yml

./filebaeat/log.json  这个文件放置了收集日志文件的位置, 这个与偏移量有关, 如收集数据时候会根据这个文件来标识上次到什么地址, 这次接着取收集

es集群节点状态颜色:

  红色  : 表示集群的部分主分片未正常工作

  黄色:表示集群的副本未正常使用

  绿色: 表示集群的主分片和副本 均正常

 

配置操作

对收集的日志进行拆分 这样方便查看 ,获取关键信息 如收集nginx的日志并对其拆分:

方法一:

  通过修改nignx原生的日志格式为json

# vim /etc/nginx/nginx.conf
http {  

    log_format nginx_json '{"@timestamp":"$time_iso8601",'
    '"host": "$server_addr",'
    '"client": "$remote_addr",'
    '"size": $body_bytes_sent,'
    '"responsetime": $request_time,'
    '"domain": "$host",'
    '"url":"$request_uri",'
    '"referer": "$http_referer",'
    '"agent": "$http_user_agent",'
    '"status":"$status",'
    '"x_forwarded_for":"$http_x_forwarded_for"}';

  access_log /var/log/nginx/access.log nginx_json;

}

# vim /etc/filebeat/filbeat.yml

filebeart.inputs:

- type :log   # 指定输入类型为log类型

  paths :   # 指定路径    

   -  /var/log/nginx/*.log     # 收集此目录下的所有日志文件

  json.keys_under_root:  true      # 根据日志的json格式定义,对日子进行字段的拆分,方便直接查看对应字段的值

日志输出格式

修改tomcat 日志的json格式

#vim /etc/tomcat/conf/server.xml

  <host name="tomcat.com" appBase="webapps"
    unpackWARs="true" autoDeploy="true">
    
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access" suffix=".log"
pattern="{&quot;requestTime&quot;:&quot;%t&quot;,&quot;clientIP&quot;:&quot;%h&quot;,&quot;threadID&quot;:&quot;%I&quot;,&quot;protocol&quot;:&quot;%H&quot;,&quot;requestMethod&quot;:&quot;%r&quot;,&quot;requestStatus&quot;:&quot;%s&quot;,&quot;sendBytes&quot;:&quot;%b&quot;,&quot;queryString&quot;:&quot;%q&quot;,&quot;responseTime&quot;:&quot;%Dms&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;agentVersion&quot;:&quot;%{User-Agent}i&quot;}"
/>
</host> 

# vim /etc/filebeat/filebeat.yml # filebeat配置文件
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/tomcar/*.log
  json.keys_under_root: true # 对json日志进行拆分,显示

方法二:

  通过filebeat 的模块取处理

# vim  /etc/filebeat/filebeat.yml
filebeat.config.modules: # 取代input定义字段 , 利用模块会自己进行日志的拆分 path : ${path.config}
/modules.d/*.yml # 加载这个安装目录下的所有yml结尾文件 reload.enabled: true # 是否开启热加载功能,默认false

# 修改modes.d 下的nginx.yml配置文件

#  vim  .../modes.d/nginx.yml
- module : nginx
  access:
    enabled : true # 启用
    var.paths: ["/var/log/nginx/access.log*"] # 日志路径

#  filebeat  -c  /etc/filebeat/filebeat.yml   modules  list   # 查看启动的模块和禁用的模块

#  filebeat  -c  /etc/filebeat/filebeat.yml   modules  enable  nginx   # 启用nginx 模块

模块管理收集tomcat的日志:

# filebeat  -c  /etc/filebeat/filebeat.yml   modules    enable  tomcat           # 启动tomcat 模块

#修改tomcat 模块配置文件

# vim  。。。/modules.d/tomcat.yml
- module tomcat
  log:
    enabled: true
    var.input: file #指定读取文件的数据, 不指定默认是取读取udp的数据 ,有三种获取的类型, tcp , udp , file
    var.paths:
     - /var/log/tomcat/*.log

方法三:

  通过logstash 的filter插件取处理

 

filebeat 多行匹配配置

#vim  /etc/filabeat/filebeat.yml
filebeat.inputs:
 - type:log
  enabled: true
  paths:
  - /var/log/tomcat/*.log
  multiline.type: pattern # 匹配类型,匹配到进行换行处理
  multiline.pattern: '^\d{2}' #以匹配数据开头
  multiline.negate: true # 可设定false 和true 两个值
  multiline.match: after #可设定after 和before 两个值

# 数据过滤,只有包含指定内容才会采集,区分大小写
  include_lines: ['ERR','^WARN','\[error\]']
# 排除, 包含指定内容的不采集
  exclude_lines: ['DBG','^linux']

negate 和match 值介绍:

 

 

filestream 的配置

#vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: filestream # filestream 类型 与log类型相似只是写法不一样
  paths:[]
  parsers: #需要配置解析器
  - ndjson: # json格式日志显示
    keys_under_root: true
    message_key: msg
  - multiline: # 多行匹配设定
     type: pattern
     pattern: '^\d{2}'
     negate: true
     match: after

 

posted @ 2024-04-06 09:11  huxl1  阅读(27)  评论(0编辑  收藏  举报