filebeat 自启脚本

本文介绍了两个用于自动化任务的脚本,crontab.sh用于将start.sh脚本添加到crontab定时任务中,而start.sh则包含了启动、重启和状态检查功能,确保Filebeat服务的稳定运行。通过获取主机IP地址并更新配置,这两个脚本实现了灵活的系统管理和日志收集。

crontab.sh -- 将start脚本推送到crontab中使用

start.sh --启动脚本具备重启、检测状态,自动拉起功能

代码如下

cat crontab.sh 
#!/bin/bash
res=`grep "Serverip" /etc/profile | wc -l`

if [ $res == 0 ];then
	/usr/bin/cp /etc/profile /etc/profile.bak
	Serverip=`ifconfig eth0|sed  -n '2p'|sed 's/^.*inet //'|sed 's/ .*//'`
	echo "export Serverip=$Serverip" >> /etc/profile
	echo "*/2 * * * * /data/filebeat-6.6.2-linux-x86_64/start.sh"  >> /var/spool/cron/root		

fi

Serverip是为了获取主机ip地址,给filebeat.yml添加一个字段使用的

cat start.sh 
#!/bin/bash
source /etc/profile
single=$1
export Serverip=`ifconfig eth0|sed  -n '2p'|sed 's/^.*inet //'|sed 's/ .*//'`
path=/data/filebeat-6.6.2-linux-x86_64
filename=filebeat.yml
exstart="${path}/filebeat -e -c ${path}/${filename}"
juage(){
	ps -ef | grep filebeat.yml | grep -v "grep" | awk -F " " '{print $2}'
}
if [ -z $1 ];then     #1-1判断有没有参数restart,没有继续向下
	juage=`juage`
	if [ -z ${juage} ];then   #1-1-1判断有无进程,没有继续向下启动
	     nohup	${path}/filebeat -e -c ${path}/${filename}  > /dev/null 2>&1 &
	     sleep 2
	     juage=`juage`
	     if [ -z ${juage} ];then  #1-1-1-1判断pid是否为空,启动成功失败
                echo -e "\033[31m 启动失败 \033[0m"
	     else
		echo -e "\033[32m 启动完成 ${juage}  \033[0m"
             fi
	else    #1-1-2有进程,不做操作提示已运行
		echo -e "\033[32m 程序已运行 \033[0m"
	fi
elif [ $1 == restart ];then  #1-2脚本第一个参数为restart 进行重启操作
	juage=`juage`
	kill -9 ${juage}   #杀掉进程
	sleep 0.5
	nohup      ${path}/filebeat -e -c ${path}/${filename} > /dev/null 2>&1 &
	sleep 2
	juage=`juage`
	if [ "${juage}" != "" ];then  #1-2-1有进程不为空 启动成功
		echo -e  "\033[32m 重启完成 ${juage} \033[0m"
	else
		echo -e "\033[31m 重启失败 \033[0m"  #1-2-1否则 失败
	fi
fi

提供filebea.yml 供参考

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/ywgl/nginx/logs/tcp-access.log
  tags: ["nginx-tcp-access"]

  fields_under_root: true   
  fields:
    hostip: ${Serverip}

- type: log
  enabled: true
  paths:
    - /data/ywgl/nginx/logs/error.log
  tags: ["nginx-error"]
  multiline.pattern: '^ \['   #处理开头换行
  multiline.negate: true        #当前配置和下面的配置根据官网的解释配的 
  multiline.match: after
 
  fields_under_root: true   
  fields:
    host: ${Serverip}

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3



processors:
  - drop_fields:
      fields: ["beat.hostname","beat.name","beatType","offset","input.type","beat.version"]

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

<think>我们已经在之前的回答中配置了Filebeat的日志输出到文件。现在用户的新需求是:将Filebeat配置为Windows服务,并确保日志输出正常。根据引用[1]:在Windows上安装Filebeat后,可以通过PowerShell脚本将其安装为服务。具体步骤如下:步骤1:安装Filebeat服务-以管理员身份打开PowerShell。-进入Filebeat的安装目录(默认为C:\ProgramFiles\Filebeat)。-运行安装脚本:.\install-service-filebeat.ps1步骤2:配置Filebeat-编辑filebeat.yml配置文件,设置输入和输出,以及日志记录配置(如之前所述,将日志输出到文件)。步骤3:启动服务-在PowerShell中运行:Start-Servicefilebeat步骤4:验证服务状态-在PowerShell中运行:Get-Servicefilebeat同时,为了确保日志输出正常,我们需要在filebeat.yml中配置日志记录部分(如之前的回答),将Filebeat自身的日志输出到指定文件。详细步骤:1.安装Filebeat服务(引用[1]):```powershell#以管理员身份运行PowerShellcd'C:\ProgramFiles\Filebeat'.\install-service-filebeat.ps1```2.配置filebeat.yml(参考之前的日志配置和引用[4]的输入输出配置):```yaml#输入配置(示例)filebeat.inputs:-type:logenabled:truepaths:-D:\logs\*.log#替换为你的日志路径encoding:gbk#根据日志编码设置#输出配置(示例,这里以输出到Elasticsearch为例)output.elasticsearch:hosts:["172.16.20.143:9200"]#日志记录配置(关键:将Filebeat自身日志输出到文件)logging:level:infoto_files:truefiles:path:C:/Filebeat/logsname:filebeat.logrotateeverybytes:10485760#10MBkeepfiles:7```3.启动Filebeat服务:```powershellStart-Servicefilebeat```4.检查服务状态:```powershellGet-Servicefilebeat```状态应为“Running”。5.检查日志输出:到配置的日志目录(C:\Filebeat\logs)查看filebeat.log,确认是否有错误信息。注意事项:-确保Filebeat服务运行账户有权限读取日志文件(输入配置中的路径)和写入Filebeat自身日志目录。-如果遇到权限问题,可以尝试将服务运行账户设置为具有足够权限的账户(如管理员账户)或修改目录权限。故障排除:-如果服务启动失败,查看系统事件日志(EventViewer)中Filebeat服务的错误信息。-检查Filebeat自身日志(filebeat.log)是否有错误。通过以上步骤,Filebeat将作为Windows服务运行,并将自身日志输出到指定文件,同时采集指定路径的日志发送到配置的输出(如Elasticsearch)。生成相关问题:1.如何配置Filebeat服务在系统启动时自动运行?2.如何修改Filebeat服务的运行账户?3.Filebeat服务启动失败应如何排查?</think>### 在 Windows 上将 Filebeat 配置为服务的完整指南 #### 步骤 1:安装 Filebeat 服务 1. **以管理员身份打开 PowerShell** ```powershell # 进入 Filebeat 安装目录 cd 'C:\Program Files\Filebeat' # 执行安装脚本 .\install-service-filebeat.ps1 ``` 2. **验证服务安装** ```powershell Get-Service -Name "filebeat" ``` 成功安装后应显示服务状态为 `Stopped`[^1] #### 步骤 2:配置服务参数(关键步骤) 编辑 `filebeat.yml` 配置文件: ```yaml # ====== 服务日志配置 ====== logging: level: info to_files: true files: path: C:/Filebeat/logs name: filebeat-service.log # 服务模式专用日志 rotateeverybytes: 10485760 # 10MB轮转 keepfiles: 7 # ====== 日志采集配置 ====== filebeat.inputs: - type: log enabled: true paths: - C:\YourApp\logs\*.log # 替换为实际日志路径 # ====== 输出配置 ====== output.elasticsearch: # 或 logstash hosts: ["your-elasticsearch:9200"] ``` #### 步骤 3:启动并验证服务 ```powershell # 启动服务 Start-Service -Name "filebeat" # 检查服务状态 Get-Service -Name "filebeat" | Select-Object Status, StartType # 查看实时日志(可选) Get-Content -Path 'C:\Filebeat\logs\filebeat-service.log' -Wait ``` #### 步骤 4:服务管理命令 | 操作 | 命令 | |------|------| | 启动服务 | `Start-Service filebeat` | | 停止服务 | `Stop-Service filebeat` | | 重服务 | `Restart-Service filebeat` | | 删除服务 | `.\uninstall-service-filebeat.ps1` | #### 关键注意事项 1. **权限问题**: - 确保服务账户有日志目录读写权限(默认为 `LocalSystem`) - 如需修改账户:`sc config filebeat obj= "DOMAIN\User" password= "pwd"` 2. **日志验证**: - 服务日志位置:`C:\Filebeat\logs\filebeat-service.log` - 成功日志示例: ``` 2023-XX-XXT12:00:00Z INFO service/service.go:XXX Starting filebeat service... ``` 3. **开机**: ```powershell sc config filebeat start= auto ``` #### 故障排查 - **服务启动失败**: 1. 检查事件查看器:`eventvwr.msc` → Windows 日志 → 应用程序 2. 运行测试命令:`.\filebeat.exe test config -c filebeat.yml` - **日志未生成**: 1. 确认 `logging.to_files: true` 2. 检查目录权限:`icacls C:\Filebeat\logs` > **最佳实践**:首次配置后运行 `.\filebeat.exe -e -c filebeat.yml` 测试配置,再转为服务模式[^1][^4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值