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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlbqC9XL-1666235995735)(../repository/image-20221019085555373.png)]

第二步:添加docker-compose可执行权限
chmod +x /usr/local/bin/docker-compose
ll /usr/local/bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-czdb3t6R-1666235995736)(../repository/image-20221019085823395.png)]

第三步:查看docker-compose版本
docker-compose -v

安装elk

第一步:创建相关挂载目录

# 创建目录/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
# 授权相关文件夹权限
chmod -R 777 /usr/local/elk/es
chmod -R 777 /usr/local/elk/logstash
chmod -R 777 /usr/local/elk/kibana

第二步:创建配置文件

第一小步:创建docker-compose.yml
vim /usr/local/elk/docker-compose.yml

内容如下

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" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #设置使用jvm内存大小
    volumes:
      - /usr/local/elk/es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载({宿主机目录}:{容器目录})
      - /usr/local/elk/es/data:/usr/share/elasticsearch/data #数据文件挂载({宿主机目录}:{容器目录})
      - /usr/local/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 配置文件挂载({宿主机文件}:{容器文件})
    ports:
      - "9200:9200" #  {宿主机端口}:{容器端口}, 9200是ES节点与外部通讯使用的端口。它是http协议的RESTful接口(各种CRUD操作都是走的该端口,如查询:http://localhost:9200/user/_search)
      - "9300:9300" # {宿主机端口}:{容器端口}, 9300是ES节点之间通讯使用的端口。它是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 #数据文件挂载({宿主机目录}:{容器目录})
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - ELASTICSEARCH_URL=http://172.31.113.186:9200 #设置访问elasticsearch的地址,不能写localhost或者127.0.0.1,可以写内网(或公网)地址
    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的数据传输配置文件 {宿主机文件}:{容器文件}
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    ports:
      - "5044:5044" #{宿主机端口}:{容器端口}, logstash中输入源涉及到的所有端口号都需要映射,5044为默认端口号

第二小步:创建elasticsearch配置文件
vim /usr/local/elk/es/config/elasticsearch.yml

内容如下

network.host: 0.0.0.0  #使用的网络
http.cors.enabled: true #跨域配置
http.cors.allow-origin: "*"
xpack.security.enabled: true  #开启密码配置
http.cors.allow-headers: Authorization
xpack.security.transport.ssl.enabled: true
第三小步:创建kibana配置文件
# 创建配置文件logstash配置文件
vim /usr/local/elk/kibana/config/kibana.yml

内容如下

server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: ["http://172.31.113.186:9200"] #es地址;不能写localhost或者127.0.0.1,可以写内网(或公网)地址
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
第四小步:创建logstash配置文件
  • logstash.yml,logstash配置

    # 创建配置文件logstash.yml
    vim /usr/local/elk/logstash/logstash.yml
    

    内容如下

    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://172.31.113.186:9200" ]  # es地址,不能写localhost或者127.0.0.1,可以写内网(或公网)地址
    xpack.monitoring.elasticsearch.username: "elastic"   # es账号
    xpack.monitoring.elasticsearch.password: "elastic123" # es密码
    
  • logstash.config,数据传输配置

    # 创建配置文件logstash配置文件
    vim /usr/local/elk/logstash/logstash.conf
    

    内容如下

    更多可参考:https://blog.csdn.net/qq330983778/article/details/105644835/

    # 数据输入配置
    input {
        # 从TCP套接字读取数据
        tcp {
             mode => "server"
             host => "0.0.0.0"
             port => 5044 # 每个输入源都可以使用不同的端口号
             codec => json_lines
        }
    
        # 从Elastic Beats框架(如filebeat)接收数据
        #beats {
        #    port => 5044
        #}
    }
    
    # 数据处理配置
    
    
    # 数据输出配置
    output {
      elasticsearch {
        hosts => ["http://172.31.113.186:9200"] # es的地址和端口,不能写localhost或者127.0.0.1,可以写内网(或公网)地址
        user => "elastic" # es的账号密码
        password => "elastic123" # es的账号密码
        index => "all-log-%{+YYYY.MM.dd}" # 索引(自定义即可,因为想要按天分索引,所以后面使用变量%{+YYYY.MM.dd})
      }
    }
    

第三步:启动ELK

提示:docker-compose相关指令详见docker-compose相关指令

# 报错的话,尝试切换至docker-compose.yml所在目录执行此指令试试 cd /usr/local/elk
# 启动elk
docker-compose up -d
# docker-compose stop # 停止所有
# docker-compose rm # 移除所有

在这里插入图片描述

# 报错的话,尝试切换至docker-compose.yml所在目录执行此指令试试 cd /usr/local/elk
docker-compose ps

pic

第四步:设置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

执行设置密码的脚本

./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)

  • 第一步:创建一个临时的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 发送日志数据的地址 -->
        <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里面简单找一下,才能看到日志信息

    请添加图片描述

    相关资料

  • 本文已被收录进《程序员成长笔记》 ,笔者JustryDeng

回答: 安装ELK(Elasticsearch, Logstash, Kibana)需要进行以下步骤: 1. 首先,确保你的操作系统版本与Docker版本兼容。如果操作系统版本较旧,不要安装最新版本的Docker,因为可能会出现兼容性问题。例如,在CentOS 7.2上安装最新版Docker可能会导致与Linux和Docker版本不兼容的问题。如果遇到这种情况,建议卸载Docker安装较早版本的Docker。 2. 在Elasticsearch的配置目录下的elasticsearch.yml文件中添加以下配置: ``` http.cors.enabled: true http.cors.allow-origin: "*" ``` 修改完配置后,退出容器并重启。 3. 从Docker Hub拉取与Elasticsearch对应版本的Kibana镜像: ``` docker pull kibana:tag ``` 注意替换`tag`为与Elasticsearch版本对应的Kibana版本。 4. 启动Kibana容器: ``` docker run --name kib-7.6 --net elastic -d -p 5601:5601 kibana:tag ``` 注意替换`tag`为与Elasticsearch版本对应的Kibana版本。 5. 修改Kibana的配置文件kibana.yml,将默认的地址`http://elasticsearch:9200`修改为Elasticsearch服务的IP地址。可以通过进入Elasticsearch容器并查看网络详情来获取Elasticsearch服务的IP地址。 6. 重启Kibana容器后,可以通过访问`localhost:5601`来验证Kibana是否安装成功。 7. 如果需要安装Logstash,可以从Docker Hub拉取Logstash镜像: ``` docker pull logstash:7.6.2 ``` 注意替换`7.6.2`为所需的Logstash版本。 以上是安装ELK的基本步骤,具体操作可以根据实际情况进行调整。 #### 引用[.reference_title] - *1* *3* [docker安装ELK详细步骤](https://blog.csdn.net/yuemancanyang/article/details/122769308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用docker搭建elk](https://blog.csdn.net/liouwb/article/details/123899421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值