ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

filebeat自动获取ip

2021-11-19 12:33:43  阅读:257  来源: 互联网

标签:filebeat service ip systemd 获取 systemctl usr 环境变量


默认情况下filebeat只能获取本机的host,不能将本机的ip传递到logstash,但是机器的主机名会变化,或者通过克隆的方式产生的机器的主机名都一样,改主机名比较麻烦,这就造成查看日志的时候不能分辨日志来自哪台机器,极大的影响了问题的排查。
但是直接用系统环境变量会出现以下问题:CRIT Exiting: error loading states for prospector 0: missing field accessing

前提

  • OS: centos 7+
  • filebat的启动方式是systemd,且内容为下:
[Unit]
Description=filebeat
Documentation=https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Wants=network-online.target
After=systemd-setenv.service

[Service]
ExecStart=/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat_nodejs.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat_nodejs -path.logs /var/log/filebeat_nodejs
Restart=always

[Install]
WantedBy=multi-user.target

** 注意Unit里面的After **

  • 加入开机自启:
systemctl daemon-reload
systemctl enable filebeat.service

配置

配置环境变量

编辑/usr/lib/systemd/system/systemd-setenv.service

[Unit]
Description=Transfers /etc/environment to systemd
Requires=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/bash -c "/usr/bin/systemctl set-environment SERVER_IP=`ip a | grep inet  | grep brd  | grep -v docker | awk -F '[ |/]+' '{print $3}'`"

[Install]
WantedBy=multi-user.target

加入开机自启:

systemctl daemon-reload
systemctl enable systemd-setenv.service

原理

默认情况下系统的环境变量只有通过pam方式登录的用户才能读取到,但是systemd是不会进行登录的,所以就不能直接读取到系统的环境变量,但是可以通过systemctl import-environment var=value 或者 systemctl set-environment var=valua 方式给systemd配置环境变量,前者是直接导入系统的环境变量,后者是自定义,但是systemd不提供任何永久性的东西,上面的配置只是临时的,再系统重启之后就会消失。
所以针对上面的问题,需要再开机启动的时候加环境变量导入,现在又有另外2个问题:

  • 怎么才能在服务器启动的时候获取到正确的服务器ip
  • 怎么固定我们需要的顺序即:ip--> 变量 --> 服务

针对上面的两个问题我们根据systemd的特性做了上面的配置/usr/lib/systemd/system/systemd-setenv.service,首先我们可以看到它的systemd的启动脚本中有After=network-online.target,这就意味在我们的服务启动是在网络启动好之后,再看filebeatsystemd启动脚本中有After=systemd-setenv.service,意味着它是再环境变量导入之后进行的,所以可以保证filebeat通过systemd启动的时候可以读到环境变量
下面是filebeat.yml的内容:

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
  fields:
    hostIp: ${SERVER_IP}
  fields_under_root: true
  tail_files: true
  exclude_lines: ["goreplay=1"]
  scan_frequency: 5s
  close_inactive: 1m
  max_bytes: 104857600
  harvester_buffer_size: 163840 
  ignore_older: 2h
  backoff: 1s
  max_backoff: 5s

output.logstash:
  hosts: ["0.0.0.0:5046"]
  bulk_max_size: 8192
  pipelining: 10
  worker: 6

#
#
filebeat.registry_file: /var/lib/filebeat/nodejs_registry

systemd中文教程

以上

标签:filebeat,service,ip,systemd,获取,systemctl,usr,环境变量
来源: https://www.cnblogs.com/chengjiawei/p/15576590.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有