大數據

安裝 Logstash (本地及 Docker) – Elastic Stack 實戰手冊

作者:馮江濤
Logstash 是一個功能強大的工具,可與各種部署集成。 它提供了大量插件,可幫助你解析,豐富,轉換和緩衝來自各種來源的數據。 如果你的數據需要 Beats 中沒有的其他處理,則需要將 Logstash 添加到部署中。

Logstash 是 Elastic Stack 非常重要的一部分,但是它不僅僅為 Elasticsearch 所使用。它可以接受廣泛的各種數據源。Logstash 可以幫利用它自己的 Filter 幫我們對數據進行解析,豐富,轉換等。

最後,它可以把自己的數據輸出到各種需要的數據儲存地,這其中包括 Elasticsearch。

本章介紹 Logstash 的安裝和部署,包括以下幾個方面:

  1. 環境準備
  2. Logstash 的下載和安裝
  3. 啟動 Logstash
  4. 收集數據
  5. Docker 方式安裝

環境準備

  • JVM 運行環境 Logstash 依賴 JVM 運行環境,本文以 Java 8 版本進行介紹,支持以下 JVM 版本:8、11、15。

Logstash 的下載和安裝

Logstash 的安裝版本需要和 Elasticsearch 的版本一致,或至少是大版本號碼一致。在下面以 7.10 版本為例來進行安裝。如果你需要安裝其它版本的 Logstash,那麼請在相應的命令行替換相應的版本號碼。

Linux:

> curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0-linux-x86_64.tar.gz
> tar xzvf logstash-7.10.0-linux-x86_64.tar.gz

APT

# 下載安裝公鑰
> wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
> sudo apt-get install apt-transport-https
# 保存倉庫地址到本地
> echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
# 安裝Logstash
> sudo apt-get update && sudo apt-get install logstash

YUM

# 下載安裝公鑰
> sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# 新建文件/etc/yum.repos.d/logstash.repo,並插入以下內容
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# 安裝logstash
> sudo yum install logstash

Mac and Homebrew

# 安裝Elastic Homebrew倉庫
> brew tap elastic/tap
# 安裝Logstash
> brew install elastic/tap/logstash-full
# 通過Homebrew設置開機啟動logstash服務
> brew services start elastic/tap/logstash-full
# 重啟主機後,啟動Logstash
> logstash

啟動 Logstash

本文采用 tar 包安裝方式進行闡述。

  • 進入 Logstash 安裝目錄
  • 最簡配置啟動 Logstash
# 通過控制檯輸入輸出收集數據
> bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 在控制檯中輸入 "Hello world!",然後會看到控制檯輸出"Hello world!"
hello world
2013-11-21T01:22:14.405+0000 0.0.0.0 hello world

收集數據

Logstash 包含3個主要部分:輸入(inputs),過濾器(filters)和輸出(outputs)。下面以採集 log4j 日誌並輸出到 Elasticsearch 為例進行闡述。

創建收集數據的配置文件 bin/log4j2es.conf,插入以下內容

input {
  file {
  # 要採集的log文件路徑
    path => "/data/logs/springboot.log"
  }
}

filter {
}

output {
  stdout {
    codec => rubydebug
  }

  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

指定配置啟動Logstash

> bin/logstash -f bin/log4j2es.conf
# 或者後臺啟動
> nohup bin/logstash -f bin/log4j2es.conf >/dev/null 2>&1 &

查看收集到ElasticSearch索引的數據

> curl http://localhost:9200/_cat/indices

默認 Logstash 生成以 Logstash 開頭帶有日期的索引

green open logstash-2021.04.09-000001          3UhrpKMlRRCsJ7e5BRzHpA 1 1    0   0    208b    208b

查看索引中的數據

> curl -XPOST 'http://localhost:9200/logstash-2021.04.09-000001/_search'  -H 'Content-Type: application/json' -d '{"query":{"match_all":{}}}'

返回如下結果;

{
    "took": 1,
    "timed_out": false,
    "hits": {
        "hits": [
            {
                "_index": "logstash-2021.04.09-000001",
                "_type": "_doc",
                "_id": "aTL3UHkBSh9MyZ_E_yVB",
                "_score": 1.0,
                "_source": {
                    "host": "elastichost",
                    "path": "/data/logs/springboot.log",
                    "message": "2021-04-09 17:58:47.172  INFO 23556 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed3.",
                    "@version": "1",
                    "tags": [
                        "_grokparsefailure"
                    ],
                    "@timestamp": "2021-04-09T11:51:40.390Z"
                }
            }
        ]
    }
}

Docker方式安裝

拉取鏡像

docker pull docker.elastic.co/logstash/logstash:7.10.0

Docker 模式運行 Logstash,

# 1.參考tar包中logstah/config文件夾下所有配置拷貝一份放在宿主機 /usr/share/logstash/config/
# 2.修改pipeline.yml,增加以下配置
pipeline.id: main
path.config: /usr/share/logstash/config/log4j2es.conf
# -v掛載Logstash的配置/usr/share/logstash/config/到docker的路徑~/settings/中
docker run --rm -it -v ~/settings/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:7.10.0

Leave a Reply

Your email address will not be published. Required fields are marked *