ELKB介绍和二进制安装和收集k8s worker日志
ELKB介绍和二进制安装和收集k8s worker日志
目录
ELKB的组成部分
- Elasticsearch:Elasticsearch(以下简称ES) 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心,采用集中式数据存储,可以通过机器学习来发现潜在问题。ES能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标)。支持 PB级数据的秒级检索。
- Kibana:Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成
- Logstash:Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到合适的的“存储库”中。
- Beats:Beats 是一套免费且开源的轻量级数据采集器,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。
2、用途和使用场景
2.1 为什么要使用ELK
- 严格按照开发标准来说,开发人员是不能登录生产服务器查看日志数据的
- 一个应用可能分布于多态服务器,难以查找
- 同一台服务区可能部署多个应用,日志分散难以管理
- 日志可能很大,单个文件通常能达到GB级别,日志无法准确定位,日志查询不方便且速度慢
- 通常日志文件以非结构化存储,不支持数据可视化查询。
- 不支持日志分析(比如慢查询日志分析、分析用户画像等)。
2.2 使用场景
- 采集业务日志
- 采集Nginx日志
- 采集数据库日志,如MySQL
- 监控集群性能指标
- 采集k8s pod日志
3、日志采集方案
3.1 整体架构
3.2 日志采集流程
4.ELK安装
4.1 主机准备
主机 | 软件 | 版本 | 配置 | IP |
---|---|---|---|---|
kibana | kibana | 7.17.2 | 2C2G | 192.168.10.200 |
elastic | elasticsearch | 7.17.2 | 2C4G | 192.168.10.201 |
logstash | logstash | 7.17.2 | 2C4G | 192.168.10.202 |
4.2 软件安装
4.2.1 安装jdk
所有主机全部安装
[root@kibana ~]# yum -y install java-11-openjdk
[root@elastic ~]# yum -y install java-11-openjdk
[root@logstash ~]# yum -y install java-11-openjdk
4.2.2 安装kibana
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.2-x86_64.rpm
# yum -y install kibana-7.17.2-x86_64.rpm
4.2.3 安装elasticsearch
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.2-x86_64.rpm
# yum -y install elasticsearch-7.17.2-x86_64.rpm
4.2.4 安装logstash
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.2-x86_64.rpm
# yum -y install logstash-7.17.2-x86_64.rpm
4.3 软件配置及启动
4.3.1 kibana软件配置及启动
修改以下字段
cat -n /etc/kibana/kibana.yml
2 server.port: 5601
7 server.host: "192.168.10.200"
32 elasticsearch.hosts: ["http://192.168.10.201:9200"]
115 i18n.locale: "zh-CN"
说明:
server.port 是开启kibana监听端口
server.host 设置远程连接主机IP地址,用于远程访问使用
elasticsearch.hosts 设置elasticsearch.hosts主机IP,用于连接elasticsearch主机,可以为多个值
i18n.locale 设置语言支持,不需要再汉化,直接修改后即可支持中文
[root@kibana ~]# systemctl enable kibana
[root@kibana ~]# systemctl start kibana
[root@kibana ~]# ss -anput | grep ":5601"
tcp LISTEN 0 128 192.168.10.200:5601 *:* users:(("node",pid=2571,fd=71))
4.3.2 elasticsearch软件配置及启动
修改配置文件
cat -n /etc/elasticsearch/elasticsearch.yml:
17 cluster.name: k8s-elastic
23 node.name: elastic
33 path.data: /var/lib/elasticsearch
37 path.logs: /var/log/elasticsearch
56 network.host: 192.168.10.201
61 http.port: 9200
70 discovery.seed_hosts: ["192.168.10.201"]
74 cluster.initial_master_nodes: ["192.168.10.201"]
17 cluster.name: k8s-elastic
23 node.name: elastic
33 path.data: /var/lib/elasticsearch
37 path.logs: /var/log/elasticsearch
56 network.host: 192.168.10.201
61 http.port: 9200
70 discovery.seed_hosts: ["192.168.10.201"]
74 cluster.initial_master_nodes: ["192.168.10.201"]
启动服务并验证
[root@elastic ~]# systemctl enable elasticsearch
[root@elastic ~]# systemctl start elasticsearch
[root@elastic ~]# ss -anput | grep ":9200"
tcp LISTEN 0 128 [::ffff:192.168.10.201]:9200 [::]:* users:(("java",pid=9726,fd=219))
4.3.3 logstash软件配置及启动
4.3.3.1 修改配置文件
cat -n /etc/logstash/logstash.yml
19 node.name: logstash
28 path.data: /var/lib/logstash
133 api.http.host: 192.168.10.202
139 api.http.port: 9600-9700
280 path.logs: /var/log/logstash
分布式架构中 api.http.host一定要配置为logstash主机IP,不然无法远程访问。
4.3.3.2 启动服务
logstash进程不用预先启动,使用时启动即可
4.4 编写logstash用于收集日志配置文件
[root@logstash ~]# cat /etc/logstash/conf.d/logstash-to-elastic.conf
input {
beats {
host => "0.0.0.0"
port => "5044"
}
}filter {
}
output {
elasticsearch {
hosts => "192.168.10.201:9200"
index => "k8s-%{+YYYY.MM.dd}"
}
}
input就是接收端口,output就是输出到es,并且索引是什么
4.5 运行logstash
4.5.1 直接在后台运行
[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-to-elastic.conf --path.data /usr/share/logstash/data1 &
五、收集k8s集群节点系统日志
通过在work节点以DaemonSet方法运行filebeat应用实现
5.1 下载filebeat镜像
下载filebeat镜像
[root@k8s-work1 ~]# docker pull elastic/filebeat:7.17.2
5.2 创建filebeat资源清单文件
[root@k8s-master1 ~]# cat filebeat-to-logstash.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: k8s-logs-filebeat-config
namespace: kube-systemdata:
filebeat.yml: |
filebeat.inputs:
- type: log
paths:
- /var/log/messages #filebeat收集的日志目录
fields:
app: k8s
type: module
fields_under_root: truesetup.ilm.enabled: false
setup.template.name: "k8s-module"
setup.template.pattern: "k8s-module-*"#配置了Elasticsearch模板名称为
k8s-module
,并且匹配创建的索引名称模式为k8s-#module-*
output.logstash: #输出到logstash
hosts: ['192.168.10.202:5044']
index: "k8s-module-%{+yyyy.MM.dd}"---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: k8s-logs
namespace: kube-system
spec:
selector:
matchLabels:
project: k8s
app: filebeat
template:
metadata:
labels:
project: k8s
app: filebeat
spec:
containers:
- name: filebeat
image: docker.io/elastic/filebeat:7.17.2
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 500Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: k8s-logs
mountPath: /var/log/messages
volumes:
- name: k8s-logs
hostPath:
path: /var/log/messages
- name: filebeat-config
configMap:
name: k8s-logs-filebeat-config
5.3 应用filebeat资源清单文件
[root@k8s-master1 ~]# kubectl apply -f filebeat-to-logstash.yaml
5.4 在kibana中添加索引
$ip:5601
之前写的index
更多推荐
所有评论(0)