部署之前先简单说一下什么是ELK
ELK 是一组用于日志分析的开源工具,ELK 代表 Elasticsearch、Logstash 和 Kibana。这三个工具共同协作,形成一个强大的日志处理和可视化解决方案。下面是 ELK 工作原理的概要:
Logstash: Logstash 是日志数据的收集器和转换器。它能够从各种来源(例如日志文件、数据库、消息队列)收集数据,并将其转换成一个统一的格式。在 Logstash 中,数据被表示为事件,而这些事件可以包含结构化或非结构化的日志信息。
Elasticsearch: Elasticsearch 是一个分布式的搜索和分析引擎。它用于存储、索引和搜索 Logstash 收集的日志事件。Elasticsearch 提供了强大的全文搜索和分析功能,使用户能够轻松地查询和探索大量的日志数据。
Kibana: Kibana 是一个用于可视化和分析 Elasticsearch 数据的 Web 界面。它提供了强大的搜索和过滤功能,以及各种图表和仪表板,帮助用户更直观地理解和监控日志数据。
ELK 工作流程:
数据收集: Logstash 从各种数据源中收集原始的日志数据。这可以是服务器日志、应用程序日志、网络流量数据等。
数据转换: 收集到的日志数据经过 Logstash 进行转换和标准化,以确保数据的一致性。这可能涉及解析日志、过滤不需要的信息、结构化数据等。
数据存储: 转换后的日志数据被索引到 Elasticsearch 中。Elasticsearch 使用倒排索引等技术,提供了快速而灵活的搜索能力。
数据可视化: Kibana 通过 Web 界面连接到 Elasticsearch,允许用户以图表、表格和仪表板的形式对数据进行可视化。用户可以创建定制的仪表板,以更好地理解和分析日志数据。
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.100 k8s-master
192.168.10.200 k8s-node
# kubekey hosts BEGIN
192.168.10.100 k8s-master.cluster.local k8s-master
192.168.10.200 k8s-node.cluster.local k8s-node
192.168.10.100 lb.kubesphere.local
# kubekey hosts END
192.168.10.100 elk-1
192.168.10.200 elk-2
部署
安装JDK配置环境变量
[root@k8s-master elk]# tar -xf jdk-8u181-linux-x64.tar.gz -C /opt/
[root@k8s-node opt]# vi /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_181
export PATH=$PATH:/opt/jdk1.8.0_181/bin
[root@k8s-node opt]# source /etc/profile
[root@k8s-node opt]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
安装 Elasticserach配置集群
[root@k8s-master elk]# ls
elasticsearch-7.6.2-x86_64.rpm kibana-7.6.2-x86_64.rpm logstash-7.6.2.rpm
[root@k8s-master elk]# rpm -ivh elasticsearch-7.6.2-x86_64.rpm
Preparing... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Updating / installing...
1:elasticsearch-0:7.6.2-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch
主节点
[root@k8s-master ~]# grep -v "#" /etc/elasticsearch/elasticsearch.yml
cluster.name: ELK
node.name: elk-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.10.100
http.port: 9200
cluster.initial_master_nodes: ["elk-1"]
discovery.zen.ping.unicast.hosts: ["elk-1","elk-2"]
node.master: true
node.data: false
从节点
[root@k8s-node ~]# grep -v "#" /etc/elasticsearch/elasticsearch.yml
cluster.name: ELK
node.name: elk-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.10.200
http.port: 9200
cluster.initial_master_nodes: ["elk-1"]
discovery.zen.ping.unicast.hosts: ["elk-1","elk-2"]
node.master: false
node.data: true
启动
[root@k8s-master ~]# systemctl restart elasticsearch
[root@k8s-master ~]# systemctl enable elasticsearch
有进程存在或者能够发现 9200 和 9300 端口暴露,则服务启动成功。
Elasticserach集群验证
浏览器输入
http://192.168.10.100:9200/_cluster/health?pretty
显示这样
{
"cluster_name" : "ELK",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 1,
"active_primary_shards" : 4,
"active_shards" : 4,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 1,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 80.0
}
或者
{
"cluster_name" : "ELK", //集群名称
"status" : "green", //集群健康状态,green 为健康,yellow 或者 red 则是集群有问题
"timed_out" : false //是否超时,
"number_of_nodes" : 3, //集群中节点数
"number_of_data_nodes" : 2, //集群中 data 节点数量
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
部署 Kibana
[root@k8s-master elk]# rpm -ivh kibana-7.6.2-x86_64.rpm
[root@k8s-master elk]# cat /etc/kibana/kibana.yml |grep -v ^#
server.port: 5601
server.host: 192.168.10.100
elasticsearch.url: "http://192.168.10.100:9200"
[root@elk-1 ~]# systemctl start kibana
[root@elk-1 ~]# systemctl enable kibana
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /
etc/systemd/system/kibana.service.
[root@elk-1 ~]# ps -ef |grep kibana
kibana 16141 1 9 08:26 ? 00:00:03 /usr/share/kibana/bin/../node/bin/nod
e --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml
root 16192 15676 0 08:27 pts/0 00:00:00 grep --color=auto kibana
[root@elk-1 ~]# netstat -ntpl
启动后如果有进程或者能够发现 5601 端口暴露则服务启动成功,并可以通过浏览器访问地址
部署 Logstash
[root@k8s-master elk]# rpm -ivh logstash-7.6.2.rpm
[root@elk-2 ~]# vi /etc/logstash/logstash.yml
http.host: "192.168.10.100"
配置 logstash 收集 syslog 日志:
这只是简单的配置,logstash是很复杂的
[root@k8s-master elk]# vi /etc/logstash/conf.d/syslog.conf
input {
file {
path => "/var/log/containers/*.log"
type => "containerlog"
start_position => "beginning"
stat_interval => "3"
}
}
output {
if [type] == "containerlog" {
elasticsearch {
hosts => ["192.168.10.100:9200"]
index => "container-log-%{+YYYY.MM.dd}"
}
}
}
Input 部分:
input: 指定输入插件类型,这里是文件输入插件。
file: 文件输入插件的具体配置。
path: 指定要监控的文件路径,这里是 /var/log/containers/*.log,表示监控 /var/log/containers/ 目录下所有以 .log 结尾的文件。
type: 为事件指定类型,这里是 "containerlog"。
start_position: 设置读取文件的起始位置,这里是 "beginning",表示从文件的开头开始读取。
stat_interval: 设置文件状态检查的时间间隔,这里是 "3" 秒。
Output 部分:
output: 指定输出插件类型,这里是 Elasticsearch 输出插件。
if [type] == "containerlog": 条件语句,表示只有当事件的类型为 "containerlog" 时才执行以下的输出配置。
elasticsearch: Elasticsearch 输出插件的具体配置。
hosts: 指定 Elasticsearch 的主机地址,这里是 ["192.168.10.100:9200"]。
index: 设置要写入的 Elasticsearch 索引名称,这里使用了时间格式,每天创建一个新的索引,例如 "container-log-2023.12.29"。
这个配置的作用是监控指定目录下的容器日志文件,并将解析后的日志数据发送到 Elasticsearch。
检测配置文件是否错误:
[root@k8s-master elk]# chmod 644 /var/log/containers/
[root@k8s-master elk]# ln -s /usr/share/logstash/bin/logstash /usr/bin
[root@k8s-master elk]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
结果显示 OK 则证明没问题
解释:
参数说明:
● --path.settings 用于指定 logstash 的配置文件所在的目录。
● -f 指定需要被检测的配置文件的路径。
● --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了。
启动 Logstash
[root@k8s-master elk]# chown -R logstash /var/lib/logstash/
[root@k8s-master lib]# systemctl enable logstash
[root@k8s-master lib]# systemctl start logstash
使用
浏览器输入http://ip:5061
左边找到Management
点击Index Patterns
创建一个新的索引模式,以匹配 Logstash 中定义的索引名称模式,“container-log-*”
配置完后,找到 “Discover” 部分,选择适当的索引模式,查看和搜索日志数据。还可以使用 “Visualize” 和 “Dashboard” 部分创建图表和仪表板,
评论区