CentOS7 Docker安裝ELK全過程
CentOS7 Docker 安裝ELK
準備工作
安裝docker
第一步:查看已安裝的docker
docker -v
注:若已安裝的docker滿足需求,則無需重新安裝docker
第二步:卸載舊版本
# 查詢docker相關rpm
rpm -qa | grep docker
# 移除相關rpm(將上一步查詢出來的進行移除)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 移除后,再查詢docker相關rpm,確保移除成功
rpm -qa | grep docker
第三步:安裝docker依賴包
提示:中間需要確認幾次,輸入y回車即可
#安裝所需資源包
sudo yum install -y yum-utils
#設置docker下載地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#安裝docker
sudo yum install docker-ce docker-ce-cli containerd.io
第四步:查看安裝docker列表
yum list docker-ce --showduplicates | sort -r
第五步:啟動docker
sudo systemctl start docker
第六步:查看docker版本
#查看docker的版本 docker -v # 查看本地主機上已有鏡像的基本信息。 docker images
安裝docker-compose
第一步:安裝docker-compose到/usr/local/bin/目錄下
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose ll /usr/local/bin

第二步:添加docker-compose可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose ll /usr/local/bin

第三步:查看docker-compose版本
docker-compose -v
安裝elk
第一步:創(chuàng)建相關掛載目錄
# 創(chuàng)建目錄/usr/local/elk/es/data和/usr/local/elk/es/plugins和/usr/local/elk/es/config和/usr/local/elk/logstash和/usr/local/elk/kibana
mkdir -p /usr/local/elk/{es/data,es/plugins,es/config,logstash,kibana/config,kibana/data}
ll /usr/local/elk
ll /usr/local/elk/es
ll /usr/local/elk/kibana
# 授權(quán)相關文件夾權(quán)限
chmod -R 777 /usr/local/elk/es
chmod -R 777 /usr/local/elk/logstash
chmod -R 777 /usr/local/elk/kibana
第二步:創(chuàng)建配置文件
第一小步:創(chuàng)建docker-compose.yml
vim /usr/local/elk/docker-compose.yml
內(nèi)容如下
version: '3' #指定compose文件的版本號,目前有1,2,3這三個版本
services:
elasticsearch: # 指定服務名
image: elasticsearch:7.17.5 #鏡像
container_name: elasticsearch-7.17.5 #定義容器名稱
restart: always #開機啟動,失敗也會一直重啟
environment:
- "cluster.name=elasticsearch" #設置集群名稱為elasticsearch
- "discovery.type=single-node" #以單一節(jié)點模式啟動
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #設置使用jvm內(nèi)存大小
volumes:
- /usr/local/elk/es/plugins:/usr/share/elasticsearch/plugins #插件文件掛載({宿主機目錄}:{容器目錄})
- /usr/local/elk/es/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載({宿主機目錄}:{容器目錄})
- /usr/local/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 配置文件掛載({宿主機文件}:{容器文件})
ports:
- "9200:9200" # {宿主機端口}:{容器端口}, 9200是ES節(jié)點與外部通訊使用的端口。它是http協(xié)議的RESTful接口(各種CRUD操作都是走的該端口,如查詢:http://localhost:9200/user/_search)
- "9300:9300" # {宿主機端口}:{容器端口}, 9300是ES節(jié)點之間通訊使用的端口。它是tcp通訊端口,集群間和TCPclient都走的它。(java程序中使用ES時,在配置文件中要配置此端口)
kibana: # 指定服務名
image: kibana:7.17.5
container_name: kibana-7.17.5
restart: always
volumes:
- /usr/local/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml #掛載logstash的配置文件 {宿主機文件}:{容器文件}
- /usr/local/elk/kibana/data:/usr/share/kibana/data #數(shù)據(jù)文件掛載({宿主機目錄}:{容器目錄})
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
environment:
- ELASTICSEARCH_URL=http://172.31.113.186:9200 #設置訪問elasticsearch的地址,不能寫localhost或者127.0.0.1,可以寫內(nèi)網(wǎng)(或公網(wǎng))地址
ports:
- "5601:5601" # {宿主機端口}:{容器端口}
logstash: # 指定服務名
image: logstash:7.17.5
container_name: logstash-7.17.5
restart: always
volumes:
- /usr/local/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml #掛載logstash的配置文件 {宿主機文件}:{容器文件}
- /usr/local/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #掛載logstash的數(shù)據(jù)傳輸配置文件 {宿主機文件}:{容器文件}
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
ports:
- "5044:5044" #{宿主機端口}:{容器端口}, logstash中輸入源涉及到的所有端口號都需要映射,5044為默認端口號
第二小步:創(chuàng)建elasticsearch配置文件
vim /usr/local/elk/es/config/elasticsearch.yml
內(nèi)容如下
network.host: 0.0.0.0 #使用的網(wǎng)絡 http.cors.enabled: true #跨域配置 http.cors.allow-origin: "*" xpack.security.enabled: true #開啟密碼配置 http.cors.allow-headers: Authorization xpack.security.transport.ssl.enabled: true
第三小步:創(chuàng)建kibana配置文件
# 創(chuàng)建配置文件logstash配置文件 vim /usr/local/elk/kibana/config/kibana.yml
內(nèi)容如下
server.host: "0.0.0.0" server.shutdownTimeout: "5s" elasticsearch.hosts: ["http://172.31.113.186:9200"] #es地址;不能寫localhost或者127.0.0.1,可以寫內(nèi)網(wǎng)(或公網(wǎng))地址 i18n.locale: "zh-CN" #漢化 elasticsearch.username: elastic # 設置賬號密碼 elasticsearch.password: elastic123 xpack.encryptedSavedObjects.encryptionKey: "fhjskloppd678ehkdfdlliverpoolfcr" # 任意不少于32位的字符即可, 官方解釋https://www.elastic.co/guide/en/kibana/7.16/alert-action-settings-kb.html#general-alert-action-settings
第四小步:創(chuàng)建logstash配置文件
- logstash.yml,logstash配置
# 創(chuàng)建配置文件logstash.yml vim /usr/local/elk/logstash/logstash.yml
- 內(nèi)容如下
http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://172.31.113.186:9200" ] # es地址,不能寫localhost或者127.0.0.1,可以寫內(nèi)網(wǎng)(或公網(wǎng))地址 xpack.monitoring.elasticsearch.username: "elastic" # es賬號 xpack.monitoring.elasticsearch.password: "elastic123" # es密碼
- logstash.config,數(shù)據(jù)傳輸配置
# 創(chuàng)建配置文件logstash配置文件 vim /usr/local/elk/logstash/logstash.conf
內(nèi)容如下
# 數(shù)據(jù)輸入配置
input {
# 從TCP套接字讀取數(shù)據(jù)
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044 # 每個輸入源都可以使用不同的端口號
codec => json_lines
}
# 從Elastic Beats框架(如filebeat)接收數(shù)據(jù)
#beats {
# port => 5044
#}
}
# 數(shù)據(jù)處理配置
# 數(shù)據(jù)輸出配置
output {
elasticsearch {
hosts => ["http://172.31.113.186:9200"] # es的地址和端口,不能寫localhost或者127.0.0.1,可以寫內(nèi)網(wǎng)(或公網(wǎng))地址
user => "elastic" # es的賬號密碼
password => "elastic123" # es的賬號密碼
index => "all-log-%{+YYYY.MM.dd}" # 索引(自定義即可,因為想要按天分索引,所以后面使用變量%{+YYYY.MM.dd})
}
}
第三步:啟動ELK
提示:docker-compose相關指令詳見docker-compose相關指令
# 報錯的話,嘗試切換至docker-compose.yml所在目錄執(zhí)行此指令試試 cd /usr/local/elk # 啟動elk docker-compose up -d # docker-compose stop # 停止所有 # docker-compose rm # 移除所有

# 報錯的話,嘗試切換至docker-compose.yml所在目錄執(zhí)行此指令試試 cd /usr/local/elk docker-compose ps

第四步:設置es相關密碼并重啟
提示:啟動ELK需要一點時間,等一會兒(或通過docker-compose logs xxx觀察到elasticsearch服務啟動完成后)再進行此步驟
進入es容器
# docker exec -it {es容器名} /bin/bash
# 注:docker ps可查看容器名或容器id
docker exec -it elasticsearch-7.17.5 /bin/bash
執(zhí)行設置密碼的腳本
./bin/elasticsearch-setup-passwords interactive
然后依次給各個賬號設置密碼
elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user
注:本人設置的密碼較簡單,直接以{賬號名}123作為的密碼

退出容器Ctrl+P+Q,然后重啟es容器即可
# docker-compose restart {服務名}
# 注:docker-compose.yaml中可查看服務名
docker-compose restart elasticsearch
第五步(報錯時,可觀察):檢查日志是否正常
# 分別檢查這三個的日志是否正常 docker-compose logs -f elasticsearch docker-compose logs -f kibana docker-compose logs -f logstash
第六步:開放端口
提示:如果用的阿里云,那么還需要在阿里云控制臺配置開啟端口
# es端口 firewall-cmd --zone=public --add-port=9200/tcp --permanent firewall-cmd --zone=public --add-port=9300/tcp --permanent # kibina端口 firewall-cmd --zone=public --add-port=5601/tcp --permanent # logstash端口(只設置了一個端口為5044的輸入源,這里只需要開放一個端口即可) firewall-cmd --zone=public --add-port=5044/tcp --permanent firewall-cmd --reload
第七步:訪問測試(es、kibana)
訪問elastic(地址http://{address}:9200):


訪問kibana(地址http://{address}:5601):
密碼也是第四步我們設置的elastic/elastic123


第八步:日志傳輸測試(logstash)
第一步:創(chuàng)建一個臨時的spring-boot項目
第二步:引入logstash依賴支持
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version>
</dependency>
第二步:編寫日志配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty name="appName" scope="context" source="spring.application.name"/>
<springProperty name="serverPort" scope="context" source="server.port" defaultValue="0000"/>
<property name="pattern"
value="${appName}:${serverPort} %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{traceId}] %thread %logger{50}:%L %msg%n"/>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${pattern}</pattern>
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
</appender>
<!--配置logstash 發(fā)送日志數(shù)據(jù)的地址 -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>{你的elk logstash地址}:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="consoleAppender"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
第四步:啟動項目,隨便打點日志
測試代碼
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
/**
* start class
*/
@Slf4j
@RestController
@SpringBootApplication
public class DemoApplication implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
CarInfoPO carInfo = new CarInfoPO();
carInfo.setId(123L);
carInfo.setStatus(0);
carInfo.setCreatedAt(LocalDateTime.now());
carInfo.setUpdatedAt(LocalDateTime.now());
carInfo.setZjPlateNo("你好啊");
carInfo.setZjRegionId("嘿嘿");
log.info(JSON.toJSONStringWithDateFormat(carInfo, "yyyy-MM-dd HH:mm:ss"));
}
}
第五步:去kibana查看日志
提示:需要再kibana的Discover里面簡單找一下,才能看到日志信息

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Docker搭建PHP運行環(huán)境完整步驟(圖文教程)
PHP是一種廣泛使用的編程語言,被用于Web開發(fā)和服務器管理等各種用途,而Docker則是一種非常流行的容器化平臺,可以方便地管理應用程序和環(huán)境,這篇文章主要給大家介紹了關于Docker搭建PHP運行環(huán)境的完整步驟,需要的朋友可以參考下2023-09-09
Docker中部署MySQL 5.7并遠程連接Navicat的完整指南
MySQL是最流行的關系型數(shù)據(jù)庫之一,而Docker提供了輕量級、可移植的容器化解決方案,本文將詳細介紹如何在CentOS 7上使用Docker部署 MySQL 5.7,并通過Windows上的Navicat進行遠程連接,需要的朋友可以參考下2025-07-07
supervisor下的Dockerfile的多服務鏡像封裝操作
這篇文章主要介紹了supervisor下的Dockerfile的多服務鏡像封裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

