安装 ElasticSearch、Logstash、Kibana、Kafka 和 Filebeat

1 安装 ElasticSearch

ElasticSearch 是一个文本搜索引擎。注意:此步骤仅在虚拟机 ubuntuvm131 上安装。书上的 ElasticSearch 是 v6.5 的旧版。在 ElasticSearch 的官网文档站点,切换到 v6.5 的分支https://www.elastic.co/guide/en/elasticsearch/reference/6.5/deb.html,根据文档进行安装。

注: 如果后面用 apt 更新操作系统,它将更新到最新版。

  1. 导入 Elasticsearch GPG Key
bash 复制代码
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  1. 检查一下 Elasticsearch PGP key: D88E 42B4
bash 复制代码
apt-key list | grep "D88E 42B4"
  1. 安装依赖包
bash 复制代码
sudo apt install apt-transport-https
  1. 添加到源
bash 复制代码
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
  1. 完成后,检查一下: /etc/apt/sources.list
  2. 更新操作系统到最新
bash 复制代码
sudo apt update -y
  1. 安装 Elasticsearch 指定版本
bash 复制代码
sudo apt install elasticsearch=6.5.4
  1. 修改配置/etc/elasticsearch/elasticsearch.yml,在尾部添加一行
shell 复制代码
network.host: 127.0.0.1
  1. 启动服务,并检查状态。
  2. 启动 Elasticsearch 服务并设为自动启动模式
bash 复制代码
sudo systemctl restart elasticsearch
sudo systemctl enable elasticsearch
  1. 检查一下服务状态
bash 复制代码
systemctl status elasticsearch
  1. 通过访问其 URL 来验证 Elasticsearch 服务。
bash 复制代码
curl -X GET "http://127.0.0.1:9200"

#屏幕输出示例:

bash 复制代码
leolei@leifenglin:~$ netstat -an|grep 9200
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN
leolei@leifenglin:~$ curl -X GET "http://127.0.0.1:9200"
{
  "name" : "IXxUP9Y",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "MaErC709TL6KEiJwJwivpQ",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

2 安装 Logstash

Logstash 是一款日志数据分析处理工具。注意:此步骤仅在虚拟机 ubuntuvm131 上安装。安装 Logstash 指定版本。
注: 如果后面用 apt 更新操作系统,它将更新到最新版。

  1. 安装
bash 复制代码
sudo apt install logstash=1:6.4.0-1
  1. 启动服务,并设置为自动启动。
bash 复制代码
sudo systemctl restart logstash 
sudo systemctl enable logstash
  1. 检查一下服务状态
bash 复制代码
systemctl status logstash
  1. 检查一下:
    测试
bash 复制代码
/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout {} }'

屏幕输出示例:

bash 复制代码
leolei@leifenglin:~$ /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout {} }'
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[FATAL] 2025-03-29 08:55:40.861 [main] runner - An unexpected error occurred! {:error=>#<ArgumentError: Path "/usr/share/logstash/data" must be a writable directory. It is not writable.>, :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/settings.rb:447:in `validate'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:229:in `validate_value'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:140:in `block in validate_all'", "org/jruby/RubyHash.java:1343:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:139:in `validate_all'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:278:in `execute'", "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:237:in `run'", "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/share/logstash/lib/bootstrap/environment.rb:73:in `<main>'"]}
[ERROR] 2025-03-29 08:55:40.965 [main] Logstash - java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
  1. 错误可以看到:
bash 复制代码
leolei@leifenglin:/usr/share/logstash$ ll | grep data
drwxrwxr-x   2 logstash logstash   4096 Aug 18  2018 data/
  1. 因此把本用户加入到 logstash 组,退出后重新登录生效。
bash 复制代码
sudo usermod -aG logstash $USER
  1. 再次运行成功。在等待的时候,输入"Hello world",屏幕运行结果示例如下:
bash 复制代码
leolei adm cdrom sudo dip plugdev lxd logstash vboxsf
leolei@leifenglin:~$ /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout {} }'
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[INFO ] 2025-03-29 09:02:24.428 [main] writabledirectory - Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[INFO ] 2025-03-29 09:02:24.501 [main] writabledirectory - Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[WARN ] 2025-03-29 09:02:27.043 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ] 2025-03-29 09:02:27.303 [LogStash::Runner] agent - No persistent UUID file found. Generating new UUID {:uuid=>"7fc0ac6c-f2b0-4194-972f-4fd760f24fc5", :path=>"/usr/share/logstash/data/uuid"}
[INFO ] 2025-03-29 09:02:30.978 [LogStash::Runner] runner - Starting Logstash {"logstash.version"=>"6.4.0"}
[INFO ] 2025-03-29 09:02:49.159 [Converge PipelineAction::Create<main>] pipeline - Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[INFO ] 2025-03-29 09:02:50.016 [Converge PipelineAction::Create<main>] pipeline - Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x4a5dac5f run>"}
The stdin plugin is now waiting for input:
[INFO ] 2025-03-29 09:02:50.497 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[INFO ] 2025-03-29 09:02:52.205 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
Hello world
{
    "@timestamp" => 2025-03-29T09:03:05.047Z,
          "host" => "leifenglin",
       "message" => "Hello world",
      "@version" => "1"
}

按 Ctrl+C 中断退出。

3 安装 Kibana

Kibana 是一款开源的数据分析、搜索、展示平台(Web 应用)。注意:此步骤仅在虚拟机 ubuntuvm131 上安装。安装 Kibana 指定版本。

注: 如果后面用 apt 更新操作系统,它将更新到最新版。

  1. 安装
bash 复制代码
sudo apt install kibana=6.5.4
  1. 用 root 用户修改配置 /etc/kibana/kibana.yml,在尾部添加:
shell 复制代码
# added by leolei 
server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://localhost:9200"

注意,上面的配置,意味着 Kibana 只能在虚拟机本机的浏览器访问。即不能通过端口转发来访问虚拟机里的Kibana(估计是前后端分离导致的接口调用地址问题)。

  1. 启动服务。
bash 复制代码
# 启动服务,并设置为自动启动。
sudo systemctl restart kibana
sudo systemctl enable kibana
# 检查一下服务状态
systemctl status kibana
  1. 检查侦听端口
bash 复制代码
netstat -an|grep 5601
  1. 安装 Chromium 浏览器。
bash 复制代码
# 安装浏览器
sudo apt install chromium-browser
# 运行浏览器,后台运行
chromium-browser &
  1. 在浏览器上打开URL: http://localhost:5601/
    应该能够看到 Kibana 的首页。

4 安装 Kafka

Kafka 是一款高吞吐量的分布式发布、订阅消息引擎系统。注意:此步骤仅在虚拟机 ubuntuvm131 上安装。从官网下载 kafka_2.11-2.0.0.tgz

#手动安装:

bash 复制代码
# 切换到目标安装路径
cd /usr/local
# 解压缩
sudo tar zxvf /media/sf_vmshare/kafka_2.11-2.0.0.tgz
# 修改用户所有权
sudo chown -R leolei:leolei kafka_2.11-2.0.0
# 创建符号链接
sudo ln -s  kafka_2.11-2.0.0 kafka

至此,我们可以用 /usr/local/kafka 来访问此手动安装的版本。

#配置 Zookeeper:

bash 复制代码
# 创建备份
cd /usr/local/kafka/config/
cp zookeeper.properties zookeeper.properties.orig
# 修改配置文件
sed -i 's/^[^#]/#&/' zookeeper.properties
继续在上面的 `zookeeper.properties` 配置文件的尾部,添加如下配置项:
dataDir=/var/local/zookeeper/data
dataLogDir=/var/local/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=20
syncLimit=10

#创建 Zookeeper 所需目录:

bash 复制代码
# 切换到 root 用户
sudo su -
# 创建文件夹
mkdir -p /var/local/zookeeper/data
mkdir -p /var/local/zookeeper/logs
# 创建 myid
cd /var/local/zookeeper/data
echo 0 > myid
# 修改拥有者
chown -R leolei:leolei /var/local/zookeeper
# 退出 root 用户
exit

上面的 myid 文件里面存放的是服务器的编号,这里是0。每台 Kafka 机器都要指定唯一的 ID。

#配置 Kafka:

bash 复制代码
# 创建备份
cd /usr/local/kafka/config
cp server.properties server.properties.orig
# 修改配置文件
sed -i 's/^[^#]/#&/' server.properties

继续在上面的 server.properties 配置文件的尾部,添加如下配置项:

properties 复制代码
broker.id=0
listeners=PLAINTEXT://10.0.2.15:9092
log.dirs=/var/local/kafka/logs
zookeeper.connect=localhost:2181

offsets.topic.replication.factor=1
advertised.listeners=PLAINTEXT://10.0.2.15:9092
delete.topic.enable=true

#注意:和书本不同,这里增加了3个配置项。

#增加了一个 "offsets.topic.replication.factor=1" 配置项(默认值是3),不然运行会报错。

#增加了 "advertised.listeners" 配置项,并且,让它和 "listeners" 中的主机名都改为 IP。如果这里配置的是主机名的话,发现 Filebeat 会无法连接到 Kafka。

#增加了 "delete.topic.enable=true" 配置项(默认是false),这是为了后面便于将某 topic 清空。

#创建 Kafka 的日志目录:

bash 复制代码
# 创建目录
sudo mkdir -p /var/local/kafka/logs
# 修改拥有者
sudo chown -R leolei:leolei /var/local/kafka

#后台启动 Zookeeper:
cd /usr/local/kafka
# 后台启动 Zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > nohup.zookeeper.out 2>&1 &

#后台启动 Kafka:
cd /usr/local/kafka
# 后台启动 Kafka
nohup bin/kafka-server-start.sh config/server.properties > nohup.kafka.out 2>&1 &

通过 jps 命令验证一下,屏幕输出示例如下:

bash 复制代码
leolei@leifenglin:/usr/local/kafka$ jps
14456 Kafka
13979 QuorumPeerMain
14764 Jps

#模拟 Kafka 生产数据消费数据

bash 复制代码
#创建 topic
cd /usr/local/kafka
# 创建 topic "Test"
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic Test --partitions 1 --replication-factor 1

#模拟消费消息

bash 复制代码
# 消费 topic "Test" 里面的消息
bin/kafka-console-consumer.sh --bootstrap-server 10.0.2.15:9092 --topic Test --from-beginning

命令运行后,它将等待。若有新的消息,则会打印到屏幕上。

#模拟生产消息

另外打开一个 SSH 连接,在这里发送消息。

bash 复制代码
cd /usr/local/kafka
bash 复制代码
# 往 topic "Test" 里面发消息
bin/kafka-console-producer.sh --broker-list 10.0.2.15:9092 --topic Test

在编辑区,输入: Hello kafka This is my first message

每次回车就等于是发送了一条消息。消息发送成功后,消费者将发现有新消息,会打印到屏幕中。

按 Ctrl+C 退出。

5 安装 Filebeat

Filebeat 是用 Go 语言实现的轻量级日志收集器。注意:此步骤仅在虚拟机 ubuntuvm132 上安装。如前面章节"安装 ElasticSearch"中,先导入 ElasticSearch的 GPG 密钥。并且安装 OpenJDK-8。

bash 复制代码
# 导入 Elasticsearch GPG Key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# 检查一下 Elasticsearch PGP key: D88E 42B4
apt-key list | grep "D88E 42B4"

# 安装依赖包
sudo apt install apt-transport-https

# 添加到源
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

#完成后,检查一下: /etc/apt/sources.list

bash 复制代码
# 更新操作系统到最新
sudo apt update -y

安装 Filebeat 指定版本。

注: 如果后面用 apt 更新操作系统,它将更新到最新版。

bash 复制代码
# 安装
sudo apt install filebeat=6.5.4

#启动服务。

bash 复制代码
# 启动服务,并设置为自动启动。
sudo systemctl start filebeat
sudo systemctl enable filebeat

# 检查一下服务状态
systemctl status filebeat

通过配置 /etc/filebeat/filebeat.yml 文件,来确定 Filebeat 的输入/输出。

相关推荐
Q26433650233 小时前
【有源码】基于Hadoop与Spark的时尚精品店数据分析与可视化系统-基于多维度分析的零售时尚销售数据挖掘与可视化研究
大数据·hadoop·机器学习·数据挖掘·数据分析·spark·毕业设计
档案宝档案管理3 小时前
零售行业档案管理的痛点与解决方案:档案管理系统显身手
大数据·数据库·人工智能·档案·零售·档案管理
北邮-吴怀玉4 小时前
1.4.5 大数据方法论与实践指南-安全&合规
大数据·运维·网络·数据治理
北邮-吴怀玉4 小时前
6.1.1.1 大数据方法论与实践指南-Spark/Flink 任务开发规范
大数据·flink·spark
汤姆yu4 小时前
基于python大数据的特产推荐系统
大数据·开发语言·python
dessler4 小时前
Elasticsearch(ES)常用运维命令
linux·运维·elasticsearch
一辉ComeOn4 小时前
【大数据高并发核心场景实战】 数据持久化层 - 查询分离
java·大数据·数据库·elasticsearch·缓存·oracle
北邮-吴怀玉5 小时前
7.1.5 大数据方法论与实践指南-日志系统+监控报警
大数据·数据治理
北邮-吴怀玉5 小时前
7.1.1 大数据方法论与实践指南-数仓元数据平台(数据地图)
大数据·数据治理