首页
学习
活动
专区
圈层
工具
发布
43 篇文章
1
干货 | Elasitcsearch7.X集群/索引备份与恢复实战
2
干货 | Elasticsearch 运维实战常用命令清单
3
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
4
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
5
腾讯云Elasticsearch集群运维常用命令详解三(索引篇)
6
如何系统的学习 Elasticsearch ?
7
Elasitcsearch 开发运维常用命令集锦
8
Elasticsearch集群数据备份与恢复 Snapshot & Restore
9
搭建ELFK日志采集系统
10
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
11
使用 Ansible 部署 Elasticsearch 集群
12
技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置
13
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
14
Elasticsearch 生产环境集群部署最佳实践
15
ES 7.8 速成笔记(中)
16
ES 7.8 速成笔记(上)
17
如何在CentOS 7上设置生产Elasticsearch集群
18
kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署
19
ElasticSearch 7集群部署
20
在CentOS 7安装ElasticSearch 7.x
21
zabbix 监控 es 集群
22
ELK 日志报警插件 ElastAlert
23
Elasticsearch集群规划最佳实践
24
kubernetes-7:elasticsearch容器化
25
Go Elasticsearch 增删改查(CRUD)快速入门
26
go操作elasticsearch示例
27
在 Kubernetes 上搭建 EFK 日志收集系统
28
一文彻底搞定 EFK 日志收集系统
29
TKE上搭建EFK日志采集系统
30
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
31
腾讯云Elasticsearch集群规划及性能优化实践
32
【干货】Elasticsearch索引性能优化 (2)
33
让Elasticsearch飞起来!——性能优化实践干货
34
【干货】Elasticsearch的索引性能优化(3)
35
Elasticsearch性能优化实战指南
36
ElasticSearch性能优化官方建议
37
Elasticsearch 7.10.1集群压测报告(4核16G*3,AMD)
38
Elasticsearch压测之Esrally压测标准
39
通过 esrally 压测elasticsearch
40
Elasticsearch压测工具esrally部署之踩坑实录(上)
41
Elasticsearch压测工具Esrally部署之踩坑实录(下)
42
Elasticsearch压测工具Esrally部署指南
43
百亿架构之filebeat讲解

搭建ELFK日志采集系统

最近的工作涉及搭建一套日志采集系统,采用了业界成熟的ELFK方案,这里将搭建过程记录一下。

环境准备

操作系统信息

系统系统:centos7.2

三台服务器:10.211.55.11/12/13

安装包:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.rpm

https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-x86_64.rpm

https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.rpm

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.2-x86_64.rpm

服务器规划

服务器host11

服务器host12

服务器host13

elasticsearch(master,data,client)

elasticsearch(master,data,client)

elasticsearch(master,data,client)

kibana

logstash

logstash

logstash

filebeat

filebeat

filebeat

整个ELFK的部署架构图大致如下图:

日志采集系统搭建

安装elasticsearch集群

手把手教你搭建一个 Elasticsearch 集群文章所述,elasticsearch集群中节点有多种类型:

  • 主节点:即 Master 节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。
  • 数据节点:即 Data 节点。数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对 CPU、内存、IO 要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
  • 负载均衡节点:也称作 Client 节点,也称作客户端节点。当一个节点既不配置为主节点,也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
  • 预处理节点:也称作 Ingest 节点,在索引数据之前可以先对数据做预处理操作,所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个节点配置为 Ingest 节点。

以上就是节点几种类型,一个节点其实可以对应不同的类型,如一个节点可以同时成为主节点和数据节点和预处理节点,但如果一个节点既不是主节点也不是数据节点,那么它就是负载均衡节点。具体的类型可以通过具体的配置文件来设置。

我部署的环境服务器较少,只有三台,因此部署在每个节点上的elasticsearch实例只好扮演master、data、client三种角色了。

在三台服务器上均执行以下命令关闭selinux:

代码语言:javascript
复制
setenforce 0
sed -i -e 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config

在三台服务器上均安装java:

代码语言:javascript
复制
yum install -y java

在三台服务器上均安装elasticsearch的rpm包:

代码语言:javascript
复制
yum install -y https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.rpm

在三台服务器上修改elasticsearch的配置文件:

代码语言:javascript
复制
cat << EOF > /etc/elasticsearch/elasticsearch.yml
cluster.name: DemoESCluster
# 注意不同节点的node.name要设置得不一样
node.name: demo-es-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.211.55.11", "10.211.55.12", "10.211.55.13"]
discovery.zen.minimum_master_nodes: 2
gateway.recover_after_nodes: 2
EOF

在三台服务器上启动elasticsearch:

代码语言:javascript
复制
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

在任意服务器上检查集群中的节点列表:

代码语言:javascript
复制
yum install -y jq
curl --silent -XGET 'http://localhost:9200/_cluster/state?pretty'|jq '.nodes'

在上述命令的输出里可以看到集群的相关信息,同时 nodes 字段里面包含了每个节点的详细信息,这样一个基本的elasticsearch集群就部署好了。

安装 Kibana

接下来我们需要安装一个 Kibana 来帮助可视化管理 Elasticsearch,在host12上安装kibana:

代码语言:javascript
复制
yum install -y https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-x86_64.rpm

修改kibana的配置文件:

代码语言:javascript
复制
cat << EOF > /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
EOF

注意这里配置的elasticsearch.url为本机的es实例,这样其实还是存在单点故障的,官方建议在本机部署一个Elasticsearch 协调(Coordinating only node) 的节点,这里配置成协调节点的地址。

启动kibana:

代码语言:javascript
复制
systemctl daemon-reload
systemctl enable kibana
systemctl start kibana

配置认证需要升级License,我这里是在内网使用,就不进行这个配置了。如果须要配置访问认证可参考这里

另外还可以启用SSL,可参考这里进行配置。

为了避免单点故障,kibana可部署多个,然后由nginx作反向代理,实现对kibana服务的负载均衡访问。

安装logstash

在每台服务器上安装logstash:

代码语言:javascript
复制
yum install -y https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.rpm

修改logstash的配置文件:

代码语言:javascript
复制
cat << EOF > /etc/logstash/logstash.yml
path.data: /var/lib/logstash
path.logs: /var/log/logstash
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.url: ["http://10.211.55.11:9200", "http://10.211.55.12:9200", "http://10.211.55.13:9200"]
EOF

cat << EOF > /etc/logstash/conf.d/beat-elasticsearch.conf
input {
  beats {
    port => 5044
    ssl => false
  }
}
filter {
}
output {
  elasticsearch {
    hosts => ["10.211.55.11:9200","10.211.55.12:9200","10.211.55.13:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}
EOF

为了从原始日志中解析出一些有意义的field字段,可以启用一些filter,可用的filter列表在这里

启动logstash:

代码语言:javascript
复制
systemctl daemon-reload
systemctl enable logstash
systemctl start logstash

安装filebeat

在每台服务器上安装filebeat:

代码语言:javascript
复制
yum install -y https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.2-x86_64.rpm

修改每台服务器上的filebeat配置文件:

代码语言:javascript
复制
# 这里根据在采集的日志路径,编写合适的inputs规则
cat << EOF > /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
output.logstash:
  hosts: ["10.211.55.11:5044", "10.211.55.12:5044", "10.211.55.13:5044"]
  ssl.enabled: false
  index: 'var_log'
EOF

filebeat配置文件选项比较多,完整的参考可查看这里

在每台服务器上启动filebeat:

代码语言:javascript
复制
systemctl daemon-reload
systemctl enable filebeat
systemctl start filebeat

其它安全设置

为保证数据安全,filebeat与logstash、filebeat与elasticsearch、logstash与elasticsearch、kibana与elasticsearch之间的通讯及kibana自身均能启用SSL加密,具体启用办法就是在配置文件中配一配SSL证书就可以了,这个比较简单,不再赘述。

kibana登录认证需要升级License,这一点比较不爽,如果考虑成本,还是在前置机nginx上配个HTTP Basic认证处理好了。

部署测试

至此一个较完整的ELFK日志采集系统就搭建好了,用浏览器访问http://10.211.55.12:5601/,在kibana的界面上简单设置下就可以查看到抓取的日志了:

总结

分布式日志采集,ELFK这一套比较成熟了,部署也很方便,不过部署起来还是稍显麻烦。好在还有自动化部署的ansible脚本:ansible-beatsansible-elasticsearchansible-role-logstashansible-role-kibana,所以如果有经常部署这一套,还是拿这些ansible脚本组建自动化部署工具集吧。

参考

  1. https://mp.weixin.qq.com/s/eyfApIiDeg3qv-BD9hBNvw
  2. https://www.elastic.co/guide/cn/kibana/current/production.html
  3. https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html
下一篇
举报
领券