EFK實戰一 - 基礎環境搭建

file

在分佈式系統中,因爲節點服務會部署多臺,一旦出現線上問題須要經過日誌分析定位問題就須要登陸服務器一臺一臺進行日誌檢索,很是不便利,這時候就須要用到EFK日誌收集工具。html

在應用服務端部署Filebeat,將咱們打印到日誌文件中的日誌發送到Logstash中,在通過Logstash的解析格式化後將日誌發送到ElasticSearch中,最後經過Kibana展示出來。EFK基礎版的架構以下:
filejava

本文主要是使用docker和docker-Compose部署ELK的基礎環境,選擇7.5.1做爲EFK組件版本。node

固然了若是你們對dockerdocker-compose不是很熟悉的話能夠翻看我以前爲你們準備的兩篇文章:docker

實在不想使用docker部署的話也能夠下載對應的安裝包而後手動部署,配置方式基本同樣。bootstrap

安裝配置

elasticsearch

安裝elasticsearch以前先配置以下的系統變量安全

  • 修改/etc/sysctl.conf,在最後追加以下配置
    vm.max_map_count = 655360
  • 修改/etc/security/limits.conf,增長以下配置
*            soft    memlock          unlimited
*           hard    memlock          unlimited
*           hard    nofile           65536
*           soft    nofile           65536複製代碼

  • 修改/etc/security/limits.d/20-nproc.conf,增長以下配置
*          soft    nproc     4096
root       soft    nproc     unlimited複製代碼

  • 啓動elasticsearch臨時容器
    docker run --rm --name es -p9200:9200 -p9300:9300 -e discovery.type=single-node elasticsearch:7.5.1
  • 導出elasticsearch配置文件
    docker cp fbce586c8a56:/usr/share/elasticsearch/config/elasticsearch.yml /app/elk/elasticsearch/conf/elasticsearch.yml
  • 修改es配置文件
cluster.name: "elk-cluster"
network.host: 0.0.0.0
bootstrap.memory_lock: true
discovery.type: single-node複製代碼

  • 創建es的日誌文件夾和數據文件夾,並對文件夾受權
mkdir -p /app/elk/elasticsearch/logs
mkdir -p /app/elk/elasticsearch/data
chmod -R 777 /app/elk/elasticsearch/logs
chmod -R 777 /app/elk/elasticsearch/data複製代碼

  • 中止臨時容器
    docker stop fbce586c8a56

logstash

  • 啓動臨時容器
    docker run --rm --name logstash -p5044:5044 -p9600:9600 logstash:7.5.1
  • 導出docker的配置文件
    docker cp 5adb0971bb0f:/usr/share/logstash/config /app/elk/logstash
  • 創建logstash數據文件夾,並對其受權
mkdir -p /app/elk/logstash/data
chmod -R 777 /app/elk/logstash/data複製代碼

  • 複製logstash啓動文件,並對其修改
cd /app/elk/logstash/config
cp logstash-sample.conf logstash.conf複製代碼

修改logstash.conf,配置outputbash

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://172.31.0.207:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}複製代碼

暫時修改一下ES的訪問路徑便可。服務器

  • 中止臨時容器
    docker stop 5adb0971bb0f

kibana

  • 啓動臨時容器
    docker run --rm --name kibana -p5601:5601 kibana:7.5.1
  • 導出kibana配置文件
    docker cp f21f0f9e0259:/usr/share/kibana/config/kibana.yml /app/elk/kibana/conf/kibana.yml
  • 修改kibana配置
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.31.0.207:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN複製代碼

設置i18n.locale: zh-CN屬性後會對kibana進行漢化,這樣便於操做,主要仍是我英語不太好~微信

  • 中止臨時容器
    docker stop f21f0f9e0259

docker-compose

通過上面的準備,咱們能夠編寫docker-compose文件,方便咱們對容器進行編排,一鍵啓動。有了以前的基礎,咱們很容易編寫出對應的yml文件,編寫後的內容以下:架構

version: "3"
services:
  elasticsearch:
    image: docker.io/elasticsearch:7.5.1
    container_name: elasticsearch
    environment:
      - "ES_JAVA_OPTS=-Xms4096m -Xmx4096m -Xmn1300m"
    volumes:
      - /app/elk/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /app/elk/elasticsearch/data:/usr/share/elasticsearch/data:rw
      - /app/elk/elasticsearch/logs:/usr/share/elasticsearch/logs:rw
    ports:
      - "9200:9200"
      - "9300:9300"
    restart: always

  kibana:
    image: docker.io/kibana:7.5.1
    container_name: kibana
    volumes:
      - /app/elk/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    restart: always

  logstash:
    image: logstash:7.5.1
    container_name: logstash
    command: logstash -f /usr/share/logstash/config/logstash.conf
    volumes:
      - /app/elk/logstash/config:/usr/share/logstash/config
      - /app/elk/logstash/data:/usr/share/logstash/data
    ports:
      - "9600:9600"
      - "5044:5044"
    depends_on:
      - elasticsearch
    restart: always複製代碼

將docker-compose文件上傳至服務器,啓動docker服務docker-compose -f elk.yml up -d
file

啓動完成後訪問kibana地址http://172.31.0.207:5601/驗證是否正常訪問

安全認證

咱們剛剛部署的elk環境是不須要密碼就能夠登陸kibana的,這樣誰均可以訪問並且能夠更改數據。因此咱們須要給kibana加個密碼,必需要登陸才能夠進行操做。

主要是利用elasticsearch自帶的xpack做爲權限驗證功能。操做步驟以下:

  • 修改es外部配置文件/app/elk/elasticsearch/conf/elasticsearch.yml,開啓權限驗證
xpack.security.enabled: true複製代碼

  • 重啓elasticsearch服務
    docker-compose -f elk.yml restart elasticsearch
  • 進入es容器,爲內置帳號設置密碼
docker exec -it  elasticsearch /bin/bash
cd /usr/share/elasticsearch/bin
./elasticsearch-setup-passwords interactive複製代碼

file

  • 修改kibana配置文件/app/elk/kibana/conf/kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "xxxxxx"複製代碼

  • 重啓kibana
    docker-compose -f elk.yml restart kibana
  • 從新訪問kibana,並使用上面設置的elastic帳號進行登陸
    file
    至此咱們順利給ELK加上了安全認證,能夠放心在生產環境部署使用了!

好了,各位朋友們,本期的內容到此就所有結束啦,下一期咱們會將業務系統的日誌接入ELK並對日誌進行解析格式化,歡迎持續關注。

若是以爲這篇文章對你有所幫助的話請掃描下面二維碼加個關注。"轉發" 加 "在看",養成好習慣!我們下期再見!file

歡迎掃碼關注微信公衆號或 我的博客

相關文章
相關標籤/搜索