如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack

今天我们来聊聊如何在 Ubuntu 22.04 服务器上安装 ELK Stack,并集成 Nginx 作为 Web 服务器,同时使用 Let's Encrypt Certbot 进行 SSL 认证。ELK Stack,包括 Elasticsearch、Logstash 和 Kibana,是一套强大的工具,用于实时搜索、分析和可视化日志数据。这个开源 Stack广泛用于管理和分析大量日志数据,是监控和排查现代软件应用和 IT 基础设施的必备组件。

简介

ELK Stack是一个开源的日志监控解决方案,由 Elasticsearch、Logstash 和 Kibana 三个组件组成,它们共同工作以实现日志数据的收集、存储、搜索和可视化。下面是对这三个组件的简要介绍:

  1. Elasticsearch
    • 搜索引擎:Elasticsearch 是一个基于 Lucene 构建的搜索引擎,提供了全文搜索和分析的能力。它能够存储大量的数据,并支持快速的搜索和分析。
    • 分布式设计:Elasticsearch 是分布式的,这意味着它可以运行在多个服务器上,并且能够自动处理数据的分片和复制,以实现高可用性和容错。
    • 实时搜索:Elasticsearch 提供实时的搜索能力,可以快速响应查询请求,适合需要快速分析和响应的场景。
  2. Logstash
    • 数据收集器:Logstash 是一个服务器端的数据处理器,负责从不同来源收集日志数据,如文件、数据库、消息队列等。
    • 数据转换器:Logstash 可以将收集到的数据进行过滤和转换,以满足特定的需求,比如解析日志格式、添加字段、执行数据的聚合等。
    • 数据转发器:处理后的数据可以被 Logstash 转发到 Elasticsearch 或其他存储系统中,用于后续的搜索和分析。
  3. Kibana
    • 可视化工具:Kibana 是一个基于 Web 的界面,用于可视化 Elasticsearch 中的数据。它提供了图表、地图、仪表板等多种数据展示方式。
    • 数据探索:Kibana 允许用户通过简单的查询语言(KQL)来探索数据,发现数据中的模式和趋势。
    • 仪表板和报告:用户可以创建自定义的仪表板,将不同的视图和图表组合在一起,以便于监控和报告。

ELK Stack的优势在于其强大的搜索能力、灵活的数据管道处理和直观的数据可视化,使其成为许多开发者监控和分析日志数据的首选工具。随着技术的发展,ELK Stack也在不断进化,增加了更多高级功能,如安全特性、机器学习等,以满足不断变化的业务需求。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
  • 创建一个指向服务器 IP 地址的 A 记录。例如:kibana.your_domain.com

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

1.更新系统

开始之前,确保系统是最新的。

bash 复制代码
sudo apt update
sudo apt upgrade -y

2.安装 Java

Elasticsearch 需要 Java。你可以安装 OpenJDK,这是 Java 平台的一个免费且开源的实现。

bash 复制代码
sudo apt install openjdk-17-jdk -y

验证安装:

bash 复制代码
java -version

3.安装 Elasticsearch

添加 Elasticsearch GPG 密钥:

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

添加 Elasticsearch 仓库:

bash 复制代码
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'

现在,让我们安装 Elasticsearch:

bash 复制代码
sudo apt update
sudo apt install elasticsearch -y

启动并启用 Elasticsearch:

bash 复制代码
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

验证 Elasticsearch:

bash 复制代码
curl -X GET "localhost:9200/"

输出:

json 复制代码
{
  "name" : "elk",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "yMKeohL1SnafmH9eiMXPAA",
  "version" : {
    "number" : "7.17.21",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "d38e4b028f4a9784bb74de339ac1b877e2dbea6f",
    "build_date" : "2024-04-26T04:36:26.745220156Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.3",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

4.安装 Logstash

执行以下命令安装 Logstash:

bash 复制代码
sudo apt install logstash -y

启动并启用 Logstash:

bash 复制代码
sudo systemctl start logstash
sudo systemctl enable logstash

5.配置 Elasticsearch

为了启用认证,我们需要启用 xpack 安全功能。编辑 Elasticsearch 配置文件:

bash 复制代码
sudo nano /etc/elasticsearch/elasticsearch.yml

添加以下安全设置:

yaml 复制代码
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

重启 Elasticsearch:

bash 复制代码
sudo systemctl restart elasticsearch

为内置用户设置密码:

运行以下命令为内置用户(包括 elastic 用户)设置密码:

bash 复制代码
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

这将提示你为以下用户输入密码:

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]

按照提示设置密码。

6.安装 Kibana

执行以下命令安装 Kibana:

bash 复制代码
sudo apt install kibana -y

启动并启用 Kibana:

bash 复制代码
sudo systemctl start kibana
sudo systemctl enable kibana

现在,打开 Kibana 配置文件:

bash 复制代码
sudo nano /etc/kibana/kibana.yml

取消注释并设置以下行,或复制并粘贴到文件末尾:

注意:kibana.your_domain.com 替换为你的域名。在文件中添加 xpack。同时将 elasticsearch.password 替换为你的密码。

yaml 复制代码
server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana.your_domain.com"
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "password@123" # 添加以下行到文件中:
xpack.security.enabled: true

保存并退出。

为了反映更改,我们需要重启 Kibana:

bash 复制代码
sudo systemctl restart kibana

7.配置 Logstash 收集和解析日志

创建一个 Logstash 配置文件:

bash 复制代码
sudo nano /etc/logstash/conf.d/logstash.conf

这里是一个读取 syslog 消息的示例配置:

ruby 复制代码
input {
  file {
    path => "/var/log/syslog"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program} (?:\[%{POSINT:pid}\])? %{GREEDYDATA:message}" }
  }
  date {
    match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    timezone => "UTC"
  }
}

output {
  elasticsearch {
    hosts => ["https://your_domain:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
    ssl => true
    cacert => "/etc/letsencrypt/live/your_domain/fullchain.pem"
    user => "logstash_system"
    password => "your_logstash_system_password"
  }
}

注意:your_logstash_system_password 替换为你在 第五步 设置的密码。

保存并退出。

重启 Logstash 以应用配置:

bash 复制代码
sudo systemctl restart logstash

8.安装和配置 Nginx

现在,我们安装 Nginx 作为代理服务器。这样,我们就可以通过域名访问 Elasticsearch。

bash 复制代码
sudo apt install nginx -y

为 Kibana 创建一个新的 Nginx 配置文件:

bash 复制代码
sudo nano /etc/nginx/sites-available/kibana.your_domain.com

注意:kibana.your_domain.com 替换为你的域名。

将以下配置添加到文件中:

kibana.your_domain.com 替换为你的实际域名。

server {
    listen 80;
    server_name kibana.your_domain.com;    location / {
        proxy_pass <http://localhost:5601>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

启用配置:

bash 复制代码
sudo ln -s /etc/nginx/sites-available/kibana.your_domain.com /etc/nginx/sites-enabled/

测试 Nginx 配置并重新加载:

bash 复制代码
sudo nginx -t
sudo systemctl reload nginx

9.配置防火墙(如果适用)

如果你启用了 UFW 防火墙,请按照以下步骤操作并添加 HTTP 和 HTTPS 端口:

bash 复制代码
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

10.使用 Let's Encrypt Certbot 获取 SSL 证书

首先,使用以下命令安装 Certbot:

bash 复制代码
sudo apt install certbot python3-certbot-nginx -y

获取并安装 SSL 证书:

kibana.your_domain.com 替换为你的实际域名。

bash 复制代码
sudo certbot --nginx -d kibana.your_domain.com

按照提示完成 SSL 证书安装。

Certbot 将自动为 Nginx 配置 SSL 设置。验证配置文件 /etc/nginx/sites-available/kibana.your_domain.com 以确保它包含 SSL 设置:

11.测试设置

最后,使用你的域名访问 Kibana:在你的 Web 浏览器中打开 https://kibana.your_domain.com。你应该可以看到 Kibana 登录屏幕。

我们已经成功地看到了如何在 Ubuntu 22.04 服务器上安装 ELK Stack。现在你可以使用 Elasticsearch、Logstash 和 Kibana 进行日志数据的收集、分析和可视化了。这个设置可以根据你的具体需求进行扩展和定制。我们已经配置了 Kibana,使其可以通过自定义域名公开访问,并使用 Let's Encrypt 进行 SSL 加密。

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
荼靡6038 分钟前
shell(三)
linux·服务器·数据库
zym大哥大18 分钟前
Linux的权限
linux·服务器
Stark-C21 分钟前
功能齐全,支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』
运维·docker·容器
嘟嘟Listing41 分钟前
设置jenkins时区记录
运维·jenkins
gma99942 分钟前
【BUG】ES使用过程中问题解决汇总
大数据·elasticsearch·搜索引擎
嘟嘟Listing42 分钟前
jenkins docker记录
java·运维·jenkins
伴野星辰43 分钟前
小乌龟TortoiseGit 安装和语言包选择
linux·运维·服务器
枫叶丹41 小时前
【在Linux世界中追寻伟大的One Piece】多线程(一)
java·linux·运维
残念ing1 小时前
【Linux】—简单实现一个shell(myshell)
linux·运维·服务器
明月心9521 小时前
linux mount nfs开机自动挂载远程目录
linux·运维·服务器