Bootstrap

如何在 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

创建雨云服务器

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

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzRjMTYyNzFmMTI1YWRlYTY5ZGE2ZWQ5ZTdiMmE0MjI2LnBuZw%3D%3D

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzQxNDU3MGNkM2RhNDhkNGNjNGJmNTE0ODk5OTIwMDBiLnBuZw%3D%3D

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2M4YWZiZWI3NjQ0NTlhMzdhODQ1MWRkMmVkOGVlZmYxLnBuZw%3D%3D

  • 输入 ssh root@你的服务器IP 例如 ssh [email protected] 回车后,首次需要输入 yes,再次回车后即可登录服务器。

/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2VhNTgxNGYxZDEwNjhjYTlmYTJiYjk0NjMxY2ZiZGYxLnBuZw%3D%3D

  • 到此为止,我们的云服务器就远程连接上了。

开始部署

1.更新系统

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

sudo apt update
sudo apt upgrade -y

2.安装 Java

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

sudo apt install openjdk-17-jdk -y

验证安装:

java -version

3.安装 Elasticsearch

添加 Elasticsearch GPG 密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

添加 Elasticsearch 仓库:

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:

sudo apt update
sudo apt install elasticsearch -y

启动并启用 Elasticsearch:

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

验证 Elasticsearch:

curl -X GET "localhost:9200/"

输出:

{
  "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:

sudo apt install logstash -y

启动并启用 Logstash:

sudo systemctl start logstash
sudo systemctl enable logstash

5.配置 Elasticsearch

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

sudo nano /etc/elasticsearch/elasticsearch.yml

添加以下安全设置:

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

重启 Elasticsearch:

sudo systemctl restart elasticsearch

为内置用户设置密码:

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

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:

sudo apt install kibana -y

启动并启用 Kibana:

sudo systemctl start kibana
sudo systemctl enable kibana

现在,打开 Kibana 配置文件:

sudo nano /etc/kibana/kibana.yml

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

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

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:

sudo systemctl restart kibana

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

创建一个 Logstash 配置文件:

sudo nano /etc/logstash/conf.d/logstash.conf

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

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 以应用配置:

sudo systemctl restart logstash

8.安装和配置 Nginx

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

sudo apt install nginx -y

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

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;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/kibana.your_domain.com /etc/nginx/sites-enabled/

测试 Nginx 配置并重新加载:

sudo nginx -t
sudo systemctl reload nginx

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

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

ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

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

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

sudo apt install certbot python3-certbot-nginx -y

获取并安装 SSL 证书:

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

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 登录屏幕。

image.png

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

相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

;