情况描述
filebeat.yml 文件修改替换部分内容:
filebeat.inputs:
- type: log
enabled: true
paths:
- {{path}}
fields:
index: {{index}}
ip: {{host}}
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
output.logstash:
hosts: {{logstashHost}}
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
替换方法
配置文件内容
log:
#account-manage-url: http://172.16.72.139:9091/account-manage/role/permission/
#log-upload-url: https://admin.iotxiongan.cn/api/inapi/log/upload
logstashHost: 192.168.56.102:5044
jsonLogstashHost: 192.168.56.103:9601
获取配置文件内容
@ConfigurationProperties(prefix = "log")
public class AppConfig {
private EsConfig esConfig;
private Integer defaultDays;
private String logstashHost;
private String jsonLogstashHost;
private String esStorageHost;
private String esMountPath;
private SshConfig sshConfig;
public EsConfig getEsConfig() {
return this.esConfig;
}
public Integer getDefaultDays() {
return this.defaultDays;
}
public String getLogstashHost() {
return this.logstashHost;
}
...
内容替换,写入需要替换的内容
final HashMap<String, Object> map = new HashMap<String, Object>();
Mustache m;
final StringWriter writer = new StringWriter();
map.put("path", logger.getPath());
map.put("index", this.appConfig.getEsConfig().getIndexPrefix() + logger.getIndex());
ArrayList<String> objects = new ArrayList<>();
objects.add("\""+this.appConfig.getLogstashHost()+"\"");
map.put("logstashHost",objects );
map.put("host", logger.getHost());
m = this.mustacheFactory.compile("template/filebeat.yml");
m.execute(writer, map);
...
程序运行后,一般的能够替换成功
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/log-demo/alerts/*.log
fields:
index: logs-tx01
ip: 192.168.56.103
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
output.logstash:
hosts: ["192.168.56.102:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
但是发现
此处应该是 hosts: ["192.168.56.102:5044"]
但是变成了hosts: [";192.168.56.102:5044";]
进行了HTML字符转义
解决方法
filebeat.inputs:
- type: log
enabled: true
paths:
- {{path}}
fields:
index: {{index}}
ip: {{host}}
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
output.logstash:
hosts: {{&logstashHost}}
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
就是 hosts: {{&logstashHost}} 在变量前加了一个禁止转义的“&”