Elasticsearch及ELK使用(二):日志数据采集

本文详细介绍了如何在Linux环境下安装配置ELK Stack组件,包括Logstash、Filebeat及Elasticsearch,实现业务日志的采集、处理与存储。通过具体步骤与配置示例,展示了如何定制日志输入输出、过滤与索引设置,以及如何利用Kibana进行日志搜索与分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 继续安装ELK

上文已经安装了ELK三大件中的两个软件elasticsearch和kibana。 在此基础上,在同一个机器上再安装logstash, 完成三大件的安装。

  1. (非root用户)登录linux,下载最新的logstash安装包 下载地址https://www.elastic.co/cn/downloads/elasticsearch 。然后解压即可

    cd /home/zyplanke/elk
    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.8.3.tar.gz
    tar -xvf logstash-6.8.3.tar.gz
    

2 安装filebeat

filebeat通常与日志源服务器放同一台机器上。因此我们在另一台跑业务(有业务日志)的Linux机器上安装filebeat。

如果是收集业务系统的日志,确保filebeat对日志文件具有读权限。

  1. 登录业务系统(通常可使用业务系统的用户)载最新的filebeat安装包 下载地址https://www.elastic.co/cn/downloads/elasticsearch

    cd /home/zyplanke/elk
    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.3-linux-x86_64.tar.gz
    tar -xvf filebeat-6.8.3-linux-x86_64.tar.gz
    

3 配置日志文件采集

filebeat从日志源采集日志数据,通过网络发给logstash,logstash将数据进行处理后发给elasticsearch。

前面已经将elasticsearch和kibana,下面分别配置filebeat和logstash。

3.1 配置filebeat

编辑filebeat.yml, 内容如下

filebeat.inputs:
- type: log
  enabled: true
  paths: 
   - /var/log/*.log
  fields:
  	logcategory: oslog

#output.elasticsearch:        由于我们filebeat不直接发给elasticsearch,所有注释本配置。
#  hosts: ["localhost:9200"]


output.logstash:
  hosts: ["192.168.43.201:5044"]

上面的filebeat配置:

  • input表示,filebeat从指定的目录和文件作为采集的日志源(路径和文件名支持星号模糊匹配。 注意必须有被采集文件的读权限)。必须enabled为true,否则不生效。 可以配置多个input。
  • 而fields是自己定义的字段(并赋值),方便后续处理。
  • output表示,filebeat将采集的日志(加上fileds、tag及其他属性)后,将起传输到logstash

3.2 配置logstash

在config目录中,以复制logstash-sample.conf样例文件,得到文件logstash_file.conf。

编辑config/logstash_file.conf,内容如下

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.43.201:9200"]
    index => "%{[fields][logcategory]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

上面logstash_file.conf配置的:

  • input:logstash从filebeat接收数据的本地端口。
  • filter(可选):进行转换改变
  • output:logstash结果传输到哪里(这里定义为传输到elasticsearch,若elasticsearch集群有多个节点则hosts内容应多个)。同时配置了索引名。注意这里使用了filebeat自定义字段。

3.3 启动

  1. 启动logstash。
./logstash -f ../config/logstash_file.conf

启动需要多等一小会。

  1. 启动filebeat。 ./filebeat -e -c 配置文件名 -e输出到标准输出,默认输出到syslog和logs下 -c 指定配置文件
./filebeat -e -c filebeat.yml

默认filebeat会在当前目录创建data目录,里面存放了每个采集文件的名字和坐标(偏移量),这样可以在filebeat重启后支持断点续传。

如果希望filebeat全部重新传输,则可以把filebeat下整个data目录删除(可能在elasticsearch中也要删除。),让filebeat觉得从来都没有传输过。
附:为了便于filebeat的启停管理,写了一个名为:run_filebeat.sh的Shell脚本供使用

##################################################################################
# desc:    FileBeat运行管理脚本
###################################################################################
CURR_PWD=`pwd -P`

Usage()
{
	echo "*******************************************************"
	echo " Usage: "
	echo "  `basename $0`            : print this usage info "
	echo "  `basename $0` show       : show current running process "
	echo "  `basename $0` start      : start process"    		
	echo "  `basename $0` stop       : stop process"
	echo "  `basename $0` kill       : froce kill process"
	echo ""
	exit 0
}

#判断参数的参数个数,如果不符合要求,则输出用法提示
if [ $# -ne 1 ];then   
    Usage
fi 

case $1 in
	"show")  # 显示当前正运行的进程
	  echo ""
		echo " Currently, running processes as follows....."
		echo "*******************************************************"
		#ps -f | head -1
		ps -f -u `whoami` | grep -w "filebeat" | grep -v "grep" | awk '{print $2}'  |xargs -r pwdx | grep -w "${CURR_PWD}" | awk -F: '{print $1}' | xargs -r ps -f -p | grep -v "grep"
		echo "*******************************************************"
		echo ""
		;;	
		
	"start")
		nohup ${CURR_PWD}/filebeat -e -c filebeat.yml &
		echo " starting...  "
		sleep 1
		echo " Please check the result via logs files or nohup.out!"
		echo ""
		;;
		
	"stop")
		ps -f -u `whoami` | grep -w "filebeat" | grep -v "grep" | awk '{print $2}'  |xargs -r pwdx | grep -w "${CURR_PWD}" | awk -F: '{print $1}' | xargs -r kill > /dev/null 2>&1
		echo " stoping...  "
		sleep 1
		echo " Please check the result by yourself!"
		echo ""
		;;
	"kill")
		ps -f -u `whoami` | grep -w "filebeat" | grep -v "grep" | awk '{print $2}'  |xargs -r pwdx | grep -w "${CURR_PWD}" | awk -F: '{print $1}' | xargs -r kill > /dev/null 2>&1
		sleep 5
		ps -f -u `whoami` | grep -w "filebeat" | grep -v "grep" | awk '{print $2}'  |xargs -r pwdx | grep -w "${CURR_PWD}" | awk -F: '{print $1}' | xargs -r kill -9 > /dev/null 2>&1
		;;
	*)
		echo " input error!!! "
		Usage
		;;	
esac
exit 0

3.4 检查结果

当filebeat、logstash、elasticsearch、kibana都启动后。日志会自动采集,并存放到elasticsearch中。通过kibana可以查看结果:
在这里插入图片描述

注意:该index的health为yellow是因为,logstash向elasticsearch创建index时指定了number_of_replicas=1,既处理主数据外至少还需要一个副本。

而elasticsearch要求副本应分散在不同的节点node上,这样安全避免单节点故障而丢失数据。因本环境elasticsearch只有一个node,所有health为yellow。如果把该index的设置Setting中,“number_of_replicas” 改为 “0”。则health就会变为green。

3.5 搜索结果(文档)

在源日志中,有/var/log/vmware-vmsvc.log日志文件,该文件里面的数据为:
在这里插入图片描述

在kibana里“Dev Tools”中通过RESTfull API 模糊搜索

GET /oslog-6.8.3-2020.06.25/_search
{
  "query": { "match": { "log.file.path": "vmsvc.log" } },
  "sort": [
    {
      "@timestamp": {
        "order": "asc"
      }
    }
  ]
}

搜索结果如下图,在message集中就是vmware-vmsvc.log的日志内容。
在这里插入图片描述

3.6 字段拆分过滤

  1. 上面的message是日志的每一行,实际上日志每行的内容是有规律的,可以进行切割,以便精确的进行分析。

其他不变。编辑config/logstash_file.conf,增加filter内容如下

input {
  beats {
    port => 5044
  }
}

filter {
    mutate {
      split => {"message"=>"Z]"}
    }
    mutate {
        add_field => {
         "datetime" => "%{[message][0]}"
         "msg" => "%{[message][1]}"
        }
    }
    mutate {
       convert => {
          "datetime" => "string"
          "msg" => "string"
        }
    }
    mutate {
       lowercase => ["[fields][logcategory]"]
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[fields][logcategory]}-aftersplit-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

mutate(该单词意思为变化):

  • split:指定对什么内容进行切割,并指定分隔符。
  • add_field:增加哪些自定义字段,而且设置了其值从获得(从切割后的数组中获得)
  • convert:将字段转换为什么类型。
  • lowercase: 将指定的字段中的值转为小写。因为elasticsearch中的index名只允许为小写。
  1. 启动logstash。
./logstash -f ../config/logstash_file.conf

启动需要多等一小会。

  1. 启动filebeat。

    默认filebeat会在当前目录创建data目录,里面存放了每个采集文件的名字和坐标(偏移量),这样可以在filebeat重启后支持断点续传。

    如果希望filebeat全部重新传输,则可以把filebeat下整个data目录删除(可能在elasticsearch中也要删除。),让filebeat觉得从来都没有传输过。

rm data
./filebeat -e -c filebeat.yml

搜索结果(文档)

在kibana里“Dev Tools”中通过RESTfull API 模糊搜索(根据logstash的配置,index的名字为:oslog-aftersplit-2020.06.25)

GET /oslog-aftersplit-2020.06.25/_search
{
  "query": { "match": { "log.file.path": "vmsvc.log" } },
  "sort": [
    {
      "@timestamp": {
        "order": "asc"
      }
    }
  ]
}

搜索结果如下图,可以看到拆分后的字段:datatime和msg已经正确的赋值。。
在这里插入图片描述

3.7 修改index默认设置_setting

以上通过logstash在elasticsearch中创建的索引,都是默认设置的属性。 如果希望改变logstash在elasticsearch创建的索引设置,例如number_of_shards、number_of_replicas等等。 我们不能直接在logstash.conf文件中配置(因为没有直接的选项)。而是:
1、先创建一个template.json文件,在文件中编辑一下内容:

{
    "template" : "*",
    "settings" : {
        "number_of_shards": 2,
        "number_of_replicas": 0
    }
}

2、然后在logstash.conf文件中增加templatetemplate_overwrite两项配置。类似如下:

  (省略其他)
output {
 elasticsearch {
   hosts => ["http://localhost:9200"]
   index => "%{[fields][logcategory]}-aftersplit-%{+YYYY.MM.dd}"
   template => "/home/zyplanke/elk/logstash-6.8.3/config/template.json"
   template_overwrite => "true"
   #user => "elastic"
   #password => "changeme"
 }
 (省略其他)

3、重启logstash即可,新创建的索引自动会使用template.json文件定义的设置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值