月度归档: 2021年4月

Docker运行ApacheIoTDB

ApacheIoTDB-Server的部署方式

ApacheIoTDB提供了三种部署方式:源码部署,二进制程序部署,Docker部署
因为我的电脑是Ubuntu的,不兼容ApacheIoTDB,所以我采用了docker方式进行部署(docker是用debian的java镜像)


部署服务端

1.在ubuntu机器上创建目录~/iotdb-0.11.2
2.复制官方网站的dockerfile到本地:https://github.com/apache/iotdb/blob/master/docker/src/main/Dockerfile-0.11.2
3.输入以下命令制作镜像,确认docker 镜像生成成功

docker build -t iotdb:0.11.2 .

4.输入以下命令,运行iotdb,并且把数据目录和日志目录挂载到~/iotdb-0.11.2下

docker run --name iotdb -p 6667:6667 -v /home/boring/iotdb-0.11.2/data:/iotdb/data -v /home/boring/iotdb-0.11.2/logs:/iotdb/logs -d iotdb:0.11.2 /iotdb/bin/start-server.sh

在容器中用命令行工具进行测试

1.进入容器

docker exec -it iotdb bash

2.使用命令行工具连接

/iotdb/sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root

3.确认界面出现如下返回

---------------------
Starting IoTDB Cli
---------------------
 _____       _________  ______   ______
|_   _|     |  _   _  ||_   _ `.|_   _ \
  | |   .--.|_/ | | \_|  | | `. \ | |_) |
  | | / .'`\ \  | |      | |  | | |  __'.
 _| |_| \__. | _| |_    _| |_.' /_| |__) |
|_____|'.__.' |_____|  |______.'|_______/  version 0.11.2
IoTDB> login successfully
IoTDB>

DataStreams+logstash+ILM进行日志定时删除,节省硬盘资源

背景

目前所有的K8S上的容器日志都被收集到了我们的ELK上,随着时间的推移,ELK上的日志所占的存储空间越来越多,我们需要一个定时清理的策略,以节约硬盘资源。
我们主要配置以下ELK里的这几个地方

  • 通过kibana新增一个lifecycle policies
  • 通过kibana新增一个index template,注意配置DataStreams
  • logstash 的logstashPipeline
  • filebeat的filebeat.yml文件

简要配置图


Kibana上添加 Lifecycle Policies

1.点击菜单栏的【management】->点击【stack management】
2.点击DATA目录下的【Index Lifecycle Policies】
3.点击【Create policy】创建一个新的生命周期规则
4.测试的话,规则就随便配置一个每10分钟迭代一个新的,删除超过1小时的index
期望效果:
对应的index会从00001开始每隔10分钟往上+1,同时最多存在7个index。


Kibana上添加Index Templates

1.点击菜单栏的【management】->点击【stack management】
2.点击DATA目录下的【Index Management】
3.点击【Index Templates】小标签,【Create template】创建模板
4.index patterns匹配我们logstash上传来的index,比如192*
5.Data stream的配置按钮打开

6.index settings配置上我们上一步添加的Lifecycle Policies

7.mappings参数需要配置【mapped fields】和【Dynamic Template】内容可以从logstash的配置里完整复制过来
8.其他的诸如component telmpalte 和Aliases都不用配置了。保存这个index template就行了


logstash配置

因为要动态生成index,所以要写一些filter规则,这里就不贴出来了。关键注意output里要设置

"action" => "create"和ilm_enabled => false
logstash.conf: |
    input {
      beats {
        port => 5044
      }
      tcp {
        port => 9999
      }
      udp {
        port => 9998
      }
    }
    filter {
      json {
        source => "message"
      }
      if [app_name] {
        mutate {
          add_field => {
            "index_name" => "%{app_name}"
          }
        }
      } else {
        mutate {
          add_field => {
            "index_name" =>  "non_index_log"
          }
        }
      }
    }
    output {
        elasticsearch {
           hosts => ["http://elasticsearch-master-headless:9200"]
           index => "%{index_name}"
           action => "create"
           ilm_enabled => false
        }
        stdout { codec => rubydebug }
    }

filebeat配置

因为有一些日志是通过filebeat传上来的,所以filebeat也要进行少量的配置,传一个app_name到logstash用于生成index

filebeat.inputs:
  - type: log
    paths:
      - "/log/*.log"
processors:
  - decode_json_fields:
        fields: ["message"]
        process_array: false
        max_depth: 1
        target: ""
        overwrite_keys: false
  - add_fields:
      target: ''
      fields:
        app_name: "{{ .Values.nodeSelector.internet_ip}}-aimp-frontend-v2-ux"
output.logstash:
  hosts: ["{{ .Values.logs.logstash.host }}:{{ .Values.logs.logstash.beatport }}"]

苏ICP备18047533号-2