u1timate
Published on 2024-11-05 / 57 Visits
0

设置elastic agent的output为logstash

配置SSL

这里可以新生成ca证书,完成pki的创建,不需要与es的ca证书共用

  • 使用es自带的证书生成工具

/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem

这里重新自定义了生成的文件名称,最终的路径为/usr/share/elasticsearch/logstash-stack-ca.zip

  • 通过上面生成的自签名的ca证书创建客户端使用的ssl证书,进入zip文件中,使用生成的ca证书,执行以下命令

注意:ca证书的路径需要使用绝对路径

 /usr/share/elasticsearch/bin/elasticsearch-certutil cert -name client -ca-cert /root/ca/ca.crt  --ca-key /root/ca/ca.key --pem

  • 同样的,需要再生成一个logstash使用的ssl证书

/usr/share/elasticsearch/bin/elasticsearch-certutil cert -name logstash -ca-cert /root/ca/ca.crt  --ca-key /root/ca/ca.key --dns logstash.test.cn --ip 10.0.2.105 --pem

最后,转换生成的logstash的key为pkcs8格式,进入刚刚logstash的目录,转换命令如下

openssl pkcs8 -inform PEM -in logstash.key -topk8 -nocrypt -outform PEM -out logstash.pkcs8.key

将刚生成的所有证书信息,放到logstash所在的服务器中,我这里是放在/etc/logstash/pki文件夹下的,如下

配置logstash

Fleet 提供更新Output设置以添加新的output,但是,更新output应该谨慎进行。最好保留es的output配置

当更改应用于一个或多个agent的策略中的output配置时,这些agent很可能会重新读取之前处理过的日志:

  • 更改output将导致agent删除并重新创建与新output关联的所有现有集成,更改后的output会收到新的 UUID。

  • 由于新生成的UUID,agent将重新传输它们

安装logstash

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo

/etc/yum.repos.d/logstash.repo 文件中输入

[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

使用命令sudo yum install logstash 安装

  • 增加elastic-agent配置文件

vim /etc/logstash/conf.d/elastic_agent.conf 相关证书的生成教程见《配置SSL》


input {
  elastic_agent {
    port => 5044
    #enrich => none # don't modify the events' schema at all
    ssl_enabled => true
    ssl_certificate_authorities => ["/etc/logstash/pki/ca/ca.crt"]
    ssl_certificate => "/etc/logstash/pki/logstash/logstash.crt"
    ssl_key => "/etc/logstash/pki/logstash/logstash.pkcs8.key"
    ssl_client_authentication => "required"
  }
}
output {
  elasticsearch {
    hosts => ["https://10.0.2.100:9200","https://10.0.2.101:9200","https://10.0.2.102:9200"]
    data_stream => true
    api_key => "trXL-5IB7q4d1tAWt549:dX6v7m_CQHu-KIdXWBouRg" # 这个key可以在fleet 管理界面生成
    data_stream => true
    ssl => true
    cacert => "/etc/logstash/pki/es/ca.crt" #这个是之前创建es 证书的时候生成的,可以看看之前的文章
  }
}

管理端生成logstash访问es的秘钥,即api_key的值

注意在配置新的output之前,Kibana要配置加密秘钥,在kibana.yml配置文件必须存在下面配置,该配置用于管理和保护存储在 Elasticsearch 中的敏感数据

xpack.encryptedSavedObjects:
    encryptionKey: "min-32-byte-long-strong-encryption-key"

ca.crt一定要配置,否则logstash接受数据的时候会报bad_certificate错误

  • 在 Logstash 配置目录中,打开 pipelines.yml 文件并添加以下配置。替换您文件的路径

- pipeline.id: elastic-agent-pipeline
  path.config: "/etc/path/to/elastic-agent.conf"
  • 证书文件权限修改

chown -R logstash:logstash /etc/logstash/pki/
  • 启动logstash

systemctl restart logstash

即使配置了output为logstash,部分功能还是得依赖es,所以es还是得保存,只是不是默认的了

  • 修改output全局默认值为logstash

改了无法启动Kibana

该配置不能直接在管理端进行操作,必须在Kibana配置文件中操作,如下

旧的配置

xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://10.0.2.101:9200'], ca_trusted_fingerprint: f4260da774e8f05c6c37da75d83ca5a825a933fc00d4376c1a90f7fc561a7b85}]

修改为新的配置

ssl.certificate_authorities 这个字段在官方提供的文档中一直没有找到, 最后还是根据es的配置的CA指纹可选项配置推导出来的字段。 这个字段对于自签名的证书一定不能少,否则logstash接收数据的时候会报证书错误

xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://10.0.2.101:9200'], ca_trusted_fingerprint: f4260da774e8f05c6c37da75d83ca5a825a933fc00d4376c1a90f7fc561a7b85},{id: fleet-logstash-output, name: 'preconfigured_logstash_output',is_default: false, is_default_monitoring: false, type: logstash, hosts: ["10.0.2.105:5044"], ssl.certificate: "-----BEGIN CERTIFICATE-----\n123\n-----END CERTIFICATE-----",  secrets.ssl.key: "-----BEGIN RSA PRIVATE KEY-----\n123\n-----END RSA PRIVATE KEY-----", ssl.certificate_authorities: ["-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----}]

再重启kibana之前需要将fleet策略中的输出全部手动指定到es输出,否则打开fleet页面会报错

  • 或者根据策略指定输出到logstash

参考

https://www.elastic.co/guide/en/fleet/8.15/fleet-settings-changing-outputs.html

https://www.elastic.co/guide/en/fleet/8.15/secure-logstash-connections.html