溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Centos7下如何快速部署EFK服務

發布時間:2022-02-17 10:05:36 來源:億速云 閱讀:194 作者:iii 欄目:開發技術
# CentOS7下如何快速部署EFK服務

## 前言

在當今大數據時代,日志管理已成為IT系統運維和業務分析的重要環節。傳統的日志管理方式如直接查看日志文件、使用grep等命令進行簡單過濾已經無法滿足企業級應用的需求。EFK(Elasticsearch + Fluentd + Kibana)堆棧作為新一代的日志收集、存儲和可視化解決方案,憑借其高性能、可擴展性和易用性,已成為眾多企業的首選方案。

本文將詳細介紹在CentOS7操作系統下如何快速部署EFK服務,涵蓋從環境準備到各個組件的安裝配置,再到最終的集成測試全過程。通過本文的指導,讀者可以在短時間內搭建起一套完整的日志管理系統,滿足企業級日志處理需求。

## 第一章:EFK架構概述

### 1.1 EFK組件介紹

EFK由三個核心組件組成,每個組件承擔不同的角色:

1. **Elasticsearch**:分布式搜索和分析引擎,負責日志的存儲、索引和檢索
   - 基于Lucene構建,提供近實時的搜索能力
   - 支持水平擴展,可處理PB級數據
   - 提供RESTful API接口,便于集成

2. **Fluentd**:開源數據收集器,負責日志的收集、過濾和轉發
   - 采用插件式架構,支持多種輸入輸出方式
   - 提供強大的日志過濾和轉換能力
   - 內存占用低,性能優異

3. **Kibana**:數據可視化平臺,提供日志分析和展示功能
   - 豐富的圖表類型和儀表板功能
   - 支持交互式查詢和數據分析
   - 用戶友好的界面,降低使用門檻

### 1.2 EFK與傳統方案的對比

相比傳統的ELK(使用Logstash)架構,EFK具有以下優勢:

| 特性          | EFK (Fluentd)       | ELK (Logstash)      |
|---------------|---------------------|---------------------|
| 資源占用      | 內存占用低(~40MB)   | 內存占用高(~500MB)  |
| 性能          | 高吞吐量            | 相對較低            |
| 可靠性        | 內置重試機制        | 需要額外配置        |
| 部署復雜度    | 簡單                | 較復雜              |
| 插件生態      | 豐富                | 非常豐富            |

### 1.3 EFK工作流程

典型的EFK日志處理流程如下:

1. **日志收集**:Fluentd從各種數據源(應用日志、系統日志、網絡設備日志等)收集日志數據
2. **日志處理**:Fluentd對收集到的日志進行解析、過濾和格式化
3. **日志存儲**:處理后的日志被發送到Elasticsearch進行索引和存儲
4. **日志展示**:用戶通過Kibana查詢、分析和可視化日志數據

## 第二章:環境準備

### 2.1 系統要求

在開始部署前,請確保您的CentOS7系統滿足以下要求:

- **硬件配置**:
  - 最低配置:2核CPU,4GB內存,50GB磁盤空間
  - 生產環境推薦:8核CPU,16GB內存,500GB+ SSD存儲
- **軟件環境**:
  - CentOS 7.6或更高版本
  - JDK 11或更高版本(Elasticsearch依賴)
  - Ruby 2.4+(Fluentd依賴)

### 2.2 系統初始化配置

#### 2.2.1 更新系統

```bash
sudo yum update -y
sudo yum install -y epel-release

2.2.2 關閉SELinux

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2.2.3 防火墻配置

sudo systemctl start firewalld
sudo firewall-cmd --add-port={9200/tcp,5601/tcp,24224/tcp,24224/udp} --permanent
sudo firewall-cmd --reload

2.2.4 優化系統參數

編輯/etc/sysctl.conf,添加以下內容:

vm.max_map_count=262144
fs.file-max=65536

應用配置:

sudo sysctl -p

2.3 安裝Java環境

Elasticsearch依賴Java環境,推薦安裝OpenJDK 11:

sudo yum install -y java-11-openjdk java-11-openjdk-devel

驗證安裝:

java -version

第三章:Elasticsearch安裝與配置

3.1 安裝Elasticsearch

3.1.1 添加Elasticsearch倉庫

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

創建倉庫文件/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-7.x]
name=Elasticsearch 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

3.1.2 安裝Elasticsearch

sudo yum install -y elasticsearch

3.1.3 配置Elasticsearch

編輯主配置文件/etc/elasticsearch/elasticsearch.yml

cluster.name: efk-cluster
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
bootstrap.memory_lock: true

配置JVM參數(/etc/elasticsearch/jvm.options):

-Xms2g
-Xmx2g

3.1.4 啟動Elasticsearch

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

3.1.5 驗證安裝

curl -X GET "localhost:9200/"

正常輸出示例:

{
  "name" : "node-1",
  "cluster_name" : "efk-cluster",
  "cluster_uuid" : "xxxxxxxx",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "xxxxxx",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

3.2 Elasticsearch優化配置

3.2.1 內存鎖定配置

編輯/etc/systemd/system/multi-user.target.wants/elasticsearch.service,添加:

[Service]
LimitMEMLOCK=infinity

重新加載配置:

sudo systemctl daemon-reload
sudo systemctl restart elasticsearch

3.2.2 索引生命周期管理

對于日志類數據,建議配置索引生命周期策略:

curl -X PUT "localhost:9200/_ilm/policy/log_policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "30d"
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
'

第四章:Fluentd安裝與配置

4.1 安裝Fluentd

4.1.1 通過td-agent安裝

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh

4.1.2 安裝必要插件

sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch
sudo /usr/sbin/td-agent-gem install fluent-plugin-multi-format-parser

4.2 配置Fluentd

編輯主配置文件/etc/td-agent/td-agent.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<source>
  @type tail
  path /var/log/messages
  pos_file /var/log/td-agent/syslog.log.pos
  tag system.syslog
  <parse>
    @type syslog
  </parse>
</source>

<filter system.**>
  @type record_transformer
  <record>
    hostname ${hostname}
  </record>
</filter>

<match system.**>
  @type elasticsearch
  host localhost
  port 9200
  logstash_format true
  logstash_prefix system
  logstash_dateformat %Y.%m.%d
  include_tag_key true
  type_name fluentd
  <buffer>
    @type file
    path /var/log/td-agent/buffer/elasticsearch
    flush_interval 10s
  </buffer>
</match>

4.3 啟動Fluentd服務

sudo systemctl enable td-agent
sudo systemctl start td-agent

4.4 測試日志收集

發送測試日志:

echo '{"message":"test log"}' | fluent-cat debug.test

檢查Elasticsearch中是否已創建索引:

curl -X GET "localhost:9200/_cat/indices?v"

第五章:Kibana安裝與配置

5.1 安裝Kibana

sudo yum install -y kibana

5.2 配置Kibana

編輯配置文件/etc/kibana/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
server.name: "efk-kibana"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.defaultAppId: "discover"
logging.dest: /var/log/kibana/kibana.log

5.3 啟動Kibana

sudo systemctl enable kibana
sudo systemctl start kibana

5.4 訪問Kibana

在瀏覽器中訪問:http://<your-server-ip>:5601

第六章:EFK集成與測試

6.1 配置索引模式

  1. 登錄Kibana后,進入”Management” > “Stack Management”
  2. 選擇”Index Patterns” > “Create index pattern”
  3. 輸入索引模式名稱:system-*
  4. 選擇時間字段:@timestamp
  5. 點擊”Create index pattern”

6.2 日志查詢測試

  1. 進入”Discover”頁面
  2. 選擇system-*索引模式
  3. 查看收集到的系統日志

6.3 創建儀表板

  1. 進入”Dashboard” > “Create dashboard”
  2. 添加可視化組件:
    • 添加”Data Table”展示日志詳情
    • 添加”Pie Chart”展示日志類型分布
    • 添加”Line Chart”展示日志時間分布
  3. 保存儀表板

第七章:高級配置與優化

7.1 Fluentd性能優化

7.1.1 多worker配置

<system>
  workers 4
</system>

7.1.2 緩沖區優化

<match system.**>
  @type elasticsearch
  # ...其他配置...
  <buffer>
    @type file
    path /var/log/td-agent/buffer/elasticsearch
    chunk_limit_size 8MB
    total_limit_size 4GB
    flush_interval 5s
    retry_max_interval 30
    retry_forever true
  </buffer>
</match>

7.2 Elasticsearch集群配置

7.2.1 添加新節點

在其他服務器上重復Elasticsearch安裝步驟,修改配置文件:

cluster.name: efk-cluster
node.name: node-2
discovery.seed_hosts: ["node1-ip"]
cluster.initial_master_nodes: ["node-1"]

7.2.2 分片與副本配置

curl -X PUT "localhost:9200/_template/log_template" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["system-*"],
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}
'

7.3 安全配置

7.3.1 啟用Elasticsearch安全功能

編輯elasticsearch.yml

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

設置密碼:

sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

7.3.2 配置Kibana使用認證

編輯kibana.yml

elasticsearch.username: "kibana_system"
elasticsearch.password: "your_password"

第八章:常見問題排查

8.1 Elasticsearch常見問題

問題1:啟動失敗,報錯”max virtual memory areas vm.max_map_count [65530] is too low”

解決方案:

sudo sysctl -w vm.max_map_count=262144

問題2:節點無法加入集群

檢查: - 網絡連通性 - 集群名稱是否一致 - discovery.seed_hosts配置是否正確

8.2 Fluentd常見問題

問題1:日志未發送到Elasticsearch

檢查:

sudo tail -f /var/log/td-agent/td-agent.log

常見原因: - Elasticsearch服務不可達 - 緩沖區已滿 - 網絡防火墻阻止

問題2:高負載導致日志延遲

解決方案: - 增加Fluentd worker數量 - 調整緩沖區大小 - 考慮使用Fluent Bit作為輕量級替代

8.3 Kibana常見問題

問題1:無法連接到Elasticsearch

檢查: - Elasticsearch服務狀態 - Kibana配置中的Elasticsearch地址 - 安全認證配置

問題2:儀表板加載緩慢

優化建議: - 減少一次顯示的數據量 - 使用索引模式過濾不必要的數據 - 增加Kibana服務器資源

第九章:生產環境最佳實踐

9.1 架構設計建議

  • 小型環境:單節點部署所有組件
  • 中型環境:分離Elasticsearch和數據節點
  • 大型環境
    • 專用Master節點(3個)
    • 多個Data節點
    • 獨立的Ingest節點
    • 獨立的Kibana節點

9.2 監控方案

9.2.1 Elasticsearch監控

啟用內置監控:

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.collection.enabled: true

9.2.2 使用Prometheus監控EFK

配置Fluentd暴露Prometheus指標:

<source>
  @type prometheus
  port 24231
</source>

<source>
  @type prometheus_output_monitor
  interval 10
</source>

9.3 備份與恢復策略

9.3.1 使用快照備份

配置共享存儲:

path.repo: ["/mnt/elasticsearch_backups"]

創建倉庫:

curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "/mnt/elasticsearch_backups"
  }
}
'

創建快照:

curl -X PUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true"

第十章:擴展與進階

10.1 收集Docker容器日志

配置Fluentd收集Docker日志:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<source>
  @type tail
  path /var/lib/docker/containers/*/*-json.log
  pos_file /var/log/td-agent/docker.log.pos
  tag docker.*
  <parse>
    @type json
    time_key time
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

10.2 收集Kubernetes日志

使用Fluentd DaemonSet部署:

”`yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: logging spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1.11.5-debian-elasticsearch7-1.0 env: - name: FLUENT_ELASTICSEARCH_HOST value: “elasticsearch.logging.svc.cluster.local” - name: FLUENT_ELASTICSEARCH_PORT value: “920

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女