0、前景
采用 ELK 搭建一套分布式日志系统
架构图
1、ElastsiSearch
官网地址
1.1、安装
下载安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.12.0-linux-x86_64.tar.gz -C /usr/local/src
修改核心配置elasticearch.yml
cluster.name: my-application
node.name: node-1
path.data: ./data
path.logs: ./logs
networtk.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
修改JVM参数
- Xms128m
- Xmx128m
默认xms和xmx都是1g,虚拟机内存没这么大,修改一下即可,线上环境内存大可以不修改!
添加用户
ES不允许root用户运行
useradd esuser
chown -R esuser:esuser /usr/lcoal/elasticsearch-8.12.0-linux-x86_64
修改服务器配置
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
vim /etc/sysctl.conf
vm.max_map_count=262145
刷新
sysctl -p
启动ES
nohup ./elasticsearch >es.log 2>&1 &
最新版本的ES启动会默认开启安全配置,url为:https://localhost:9200
才能打开,且需要输入用户名和密码
测试阶段可以暂时关闭,修改elasticsearch.yml后重启
# Enable security features
xpack.security.enabled: false
查看进程
[root@xxx2 ~]# jps
53462 org.elasticsearch.bootstrap.Elasticsearch
115935 Jps
53375 CliToolLauncher
[root@xxx2 ~]#
2、Kibana
2.1、安装
官网地址
下载8.12.0版本
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.12.0-linux-x86_64.tar.gz
tar -zxvf kibana-8.12.0-linux-x86_64.tar.gz -C /usr/local
修改核心配置
kibana.yml
#配置本机ip
server.host: "localhost"
#配置es集群url
elasticsearch.url: "http://localhost:9200"
server.host: "0.0.0.0"
启动
./kibana & # 如果在root下启动,需要添加--allow-root
3、LogStash
Logstash 是一个数据管道,能够从各种数据源(比如 MySQL 数据库)收集数据,将数据从一处传输到另一处,并加以解析和转换
3.1、安装
官网地址
此处我们下载最新版本8.12.0
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.12.0-linux-x86_64.tar.gz
tar -zxvf logstash-8.12.0-linux-x86_64.tar.gz -C /usr/local/src
直接运行不行,必须要输入、输出参数,此处设置输入源和输出源为控制台
./logstash -e "input {stdin {}} output {stdout{}}"
结果如下
[2024-01-25T15:21:19,766][INFO ][logstash.javapipeline ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>125, "pipeline.sources"=>["config string"], :thread=>"#<Thread:0x589b120c /usr/local/src/logstash-8.12.0/logstash-core/lib/logstash/java_pipeline.rb:134 run>"}
[2024-01-25T15:21:20,406][INFO ][logstash.javapipeline ][main] Pipeline Java execution initialization time {"seconds"=>0.64}
The stdin plugin is now waiting for input:
[2024-01-25T15:21:20,459][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
[2024-01-25T15:21:20,465][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
你好啊,Logstash
{
"host" => {
"hostname" => "xxx2"
},
"@timestamp" => 2024-01-25T07:21:33.750286507Z,
"@version" => "1",
"event" => {
"original" => "你好啊,Logstash"
},
"message" => "你好啊,Logstash"
}
实际使用还是需要修改配置文件,配置路径为config
,默认存在示例文件logstash-sample.conf
cp logstash-sample.conf console-es.conf
input {
stdin {
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "console_es_index"
#user => "elastic"
#password => "changeme"
}
}
启动
bin/logstash -f config/console_es.conf
可以看到控制台日志写入了ES
Kibana 开发工具输入 GET _cat/indices, 可以 看到 console_es 这个索引已经创建出来了
查看索引的数据
配置开机自启
cat > /usr/lib/systemd/system/logstash.service <<EOF
[Unit]
Description=logstash
[Service]
User=root
ExecStart=/usr/local/src/logstash-8.12.0/bin/logstash -f /usr/local/src/logstash-8.12.0/config/filebeat_es.conf
Restart=always
[Install]
WantedBy=multi-user.target
EOF
logstash日志记录在:logs/
4、Filebeat
采用Golang编写
一款轻量级的日志采集工具
官网地址
下载解压
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.0-linux-x86_64.tar.gz
tar -zxvf filebeat-8.12.0-linux-x86_64.tar.gz -C /usr/local/src
配置核心文件 filebeat.yml
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
id: my-filestream-id
enabled: true
paths:
- /var/log/*.log
启动
bin/filebeat -e -c filebeat.yml
filebeat没有采集到数据莫名会掉,这里配置开机自启
cat > /usr/lib/systemd/system/filebeat.service <<EOF
[Unit]
Description=Filebeat is a lightweight shipper for metrics.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target
[Service]
Environment="LOG_OPTS=-e"
Environment="CONFIG_OPTS=-c /usr/local/src/filebeat-8.12.0-linux-x86_64/filebeat.yml"
Environment="PATH_OPTS=-path.home /usr/local/src/filebeat-8.12.0-linux-x86_64 -path.config /usr/local/src/filebeat-8.12.0-linux-x86_64 -path.data /usr/local/src/filebeat-8.12.0-linux-x86_64/data -path.logs /usr/local/src/filebeat-8.12.0-linux-x86_64/logs"
ExecStart=/usr/local/src/filebeat-8.12.0-linux-x86_64/filebeat $LOG_OPTS $CONFIG_OPTS $PATH_OPTS
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart filebeat
systemctl enable filebeat
输入模块
- Log输入模块:
- Log输入模块用于读取和收集已经存在的日志文件,例如应用程序生成的日志文件。
- 它监视指定的日志文件,并定期检查文件的更新,然后将新增的日志行发送到目标位置(如Elasticsearch、Logstash等)。
- Log输入模块适用于传统的日志文件收集场景,如应用程序日志、系统日志等。
- Filestream输入模块:
- Filestream输入模块用于实时收集正在写入的日志文件,而不是已经存在的日志文件。
- 它通过监控指定的目录,并跟踪正在写入的文件,将文件内容流式传输到目标位置。
- Filestream输入模块适用于实时日志收集场景,如容器化应用程序、微服务架构等。
5、Kafka
测试,搭建单机版
5.1、部署zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local
修改配置并启动
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
启动
bin/zkSercer.sh start
5.2、部署kafka
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.12-3.6.1.tgz
tar -zxvf kafka_2.12-3.6.1.tgz -C /usr/local
修改配置文件
vi server.properties(单机部署,启动不用做修改)
broker.id=0
port=9092 #端口号
log.dirs=/usr/local/kafka/log/kafka #日志存放路径,上面创建的目录
zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181
启动Kafka之前启动ZK
kafka-server-start.sh
测试,创建Topic
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
生产消息测试,向topic中写入数据
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
打开另一个终端会话并运行控制台消费者客户端来阅读您刚刚创建的事件:
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
6、完善日志框架
6.1 、架构图
Logstash 要同时接受多个 Filebeat 采集的日志,机器越多,部署的 Filebeat 也就越多,Logstash 的压力就会越大。虽然也可以像扩容 ES 一样增加 Logstash 的节点数,但是并不能从根本上解决问题,当日志量级增大到一定程度时,不仅是 Logstash,连 ES 集群都有可能撑不住!
因此,我们需要接入一些中间件来进行缓冲,首选的可靠且高性能的消息队列 Kafka(依赖分布式协调工具 Zookeeper)
6.2、测试
修改filebeat配置 filebeat.yml
output.kafka:
# initial brokers for reading cluster metadata
hosts: ["localhost:9092"]
# message topic selection + partitioning
topic: topic_test
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
修改logstash配置 kafka_es.conf
input{
kafka {
enable_auto_commit => true
auto_commit_interval_ms => "500"
codec => "json"
bootstrap_servers => "localhost:9092"
group_id => "group-01"
auto_offset_reset => "latest"
topics => "topic_test"
consumer_threads => 3
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "kafka_es_index"
#user => "elastic"
#password => "changeme"
}
stdout { codec => rubydebug }
}
重启logstash 、filebeat后,打开kibana观察
重新创建了kafka_es_index
索引
手动往/var/log/sun.log
写入测试数据
ehco "zhangsan" >>/var/log/sun.log
按照流程,该数据会从 filebeat---->kafka--->logstash--->es-->kibana
观察
参考
标签:ELK,tar,kafka,日志,8.12,logstash,localhost,分布式 From: https://www.cnblogs.com/nwnusun/p/17988991