Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

安装方式 #5

Open
UlricQin opened this issue Nov 27, 2023 · 11 comments
Open

安装方式 #5

UlricQin opened this issue Nov 27, 2023 · 11 comments
Labels
documentation Improvements or additions to documentation

Comments

@UlricQin
Copy link
Contributor

UlricQin commented Nov 27, 2023

二级制安装

github releases 页面下载最新的发布包,自动打包了 Linux 和 Windows 的 x86 和 arm64 的包。下载解压缩,执行如下命令安装:

./cprobe -install

然后修改 conf.d 下面相关的配置,主要是 writer.yaml 以及各个插件的配置。然后启动即可:

./cprobe -start

源码编译

cprobe 使用 go 语言开发,所以需要下载 go 语言的开发包:https://go.dev/dl/ 完事配置 GOROOT 和 GOPATH,这俩变量如何配置请自行 Google。之后下载 cprobe 的源码编译即可:

git clone https://github.com/cprobe/cprobe.git
cd cprobe
make

如上即可编译出 cprobe 二进制,之后就可以通过 ./cprobe -install 来安装,通过 ./cprobe -start 来启动了。

容器安装

需要先准备配置目录,比如我在 /root/works 下面创建 cprobe/conf.d 目录,在 conf.d 下放置相关的配置。然后运行下面的命令拉取镜像并测试。

docker pull flashcatcloud/cprobe:latest
docker run -d -p 5858:5858 -v /root/works/cprobe/conf.d:/app/conf.d flashcatcloud/cprobe /app/cprobe -no-writer

如果上面的命令可以正常启动容器,就成功了 99% 了。然后 stop 掉容器,我们开始编辑配置文件。首先在 conf.d 目录下创建 writer.yaml,样例在这里,把 url 的部分配置为你的时序库的 remote write 地址。cprobe 采集了数据之后就推给这个地址。

然后就是在 conf.d 下面准备各个插件配置目录,比如创建 mysql 插件目录,存放 mysql 插件配置,需要的配置可以参考这里

最后重新启动容器:

docker run -d -p 5858:5858 -v /root/works/cprobe/conf.d:/app/conf.d flashcatcloud/cprobe /app/cprobe

K8s 环境安装

TODO:欢迎大家贡献这个安装方法

@UlricQin UlricQin added the documentation Improvements or additions to documentation label Nov 27, 2023
@songtao98
Copy link

K8s 环境安装

在k8s中使用Deployment方式安装cprobe,尝试了一个最小版本,贴出yaml,希望跟大家一起讨论看看:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cprobe-deployment
  namespace: cprobe
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cprobe
  template:
    metadata:
      labels:
        app: cprobe
    spec:
      containers:
      - name: cprobe-container
        image: flashcatcloud/cprobe:latest
        command: ["/app/cprobe"]
        ports:
        - containerPort: 5858
        volumeMounts:
        - name: cprobe-config
          mountPath: /app/conf.d
      volumes:
      - name: cprobe-config
        hostPath:
          path: /root/works/cprobe/conf.d

运行结果:
image

当然,这里面有许多希望跟大家一起讨论的点,比如:

  1. cprobe的部署形式是否期望为deployment
  2. 副本数量
  3. 使用hostPath挂载配置目录conf.d是否合理、安全,是否使用PV-PVC?
  4. cprobe在k8s集群中的暴露方式?我理解通过remote-write写入时序库,也不需要配置对应的Service

最终写入文档中的时候,该配置方式还需要做一些额外的文字信息补充说明,比如类似于容器安装章节中对writer.yaml样例的引用链接等

@UlricQin
Copy link
Contributor Author

UlricQin commented Nov 28, 2023

  • cprobe 因为是探针,作为 Deployment 部署没问题的
  • 副本数量就设置为1即可,如果挂了会被自动拉起,由K8s保证高可用,简单粗暴
  • hostPath 是不合理的,因为 pod 会漂移,最好是使用 configmap 之类的来管理 conf.d 下的配置
  • 目前的版本不用暴露 service,虽然内置了 HTTP 服务,不过这个 HTTP 服务目前还没啥用,所以可以不暴露 service

@songtao98
Copy link

  • cprobe 因为是探针,作为 Deployment 部署没问题的
  • 副本数量就设置为1即可,如果挂了会被自动拉起,由K8s保证高可用,简单粗暴
  • hostPath 是不合理的,因为 pod 会漂移,最好是使用 configmap 之类的来管理 conf.d 下的配置
  • 目前的版本不用暴露 service,虽然内置了 HTTP 服务,不过这个 HTTP 服务目前还没啥用,所以可以不暴露 service

get,写了个使用ConfigMap的yaml版本:cprobe.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cprobe-deployment
  namespace: cprobe
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cprobe
  template:
    metadata:
      labels:
        app: cprobe
    spec:
      containers:
      - name: cprobe-container
        image: flashcatcloud/cprobe:latest
        command: ["/app/cprobe"]
        ports:
        - containerPort: 5858
        volumeMounts:
        - name: cprobe-writer-config
          mountPath: /app/conf.d  # writer.yaml需要放在conf.d目录下
        - name: cprobe-mysql-config  # 当需要增加某个插件的配置目录的时候,就在这里添加volumeMount,创建一个子目录如conf.d/mysql
          mountPath: /app/conf.d/mysql
      volumes:
      - name: cprobe-writer-config
        configMap:
          name: cprobe-writer
      - name: cprobe-mysql-config  # 每个插件需要一个configmap,一个configmap中可以包含多个文件,如main.yaml,rule_coll.toml等
        configMap:
          name: cprobe-mysql

同时给出ConfigMap的yaml文件参考:

cprobe-writer-cm.yaml 主要内容是conf.d目录下的writer.yaml,文件内容参考样例在这里

apiVersion: v1
kind: ConfigMap
metadata:
  name: cprobe-writer
  namespace: cprobe
data:
  writer.yaml: |
    global:
      extra_labels:
        colld: cprobe

    writers:
    - url: http://127.0.0.1:9090/api/v1/write
      concurrency: 1

cprobe-mysql-cm.yaml 对每个插件都需要一个子目录,这里以mysql为例,其中只包含main.yaml,参考配置文件在这里

apiVersion: v1
kind: ConfigMap
metadata:
  name: cprobe-mysql
  namespace: cprobe
data:
  main.yaml: |
    global:
      scrape_interval: 15s
      external_labels:
        cplugin: 'mysql'

实际使用的时候,暂且决定将cprobe deployment部署到cprobe命名空间下,其余的几个configmap也在cprobe namespace下,主要涉及几个命令:

kubectl create namespace cprobe
kubectl apply -f cprobe-writer-cm.yaml
kubectl apply -f cprobe-mysql-cm.yaml
kubectl apply -f cprobe.yaml

@crossoverJie
Copy link
Contributor

如果配置项过多的话,建议后面单独开一个 cprobe-helm-chartrepo 来单独维护,这个我有兴趣,可以 assign to me.

@songtao98
Copy link

songtao98 commented Nov 29, 2023

如果配置项过多的话,建议后面单独开一个 cprobe-helm-chartrepo 来单独维护,这个我有兴趣,可以 assign to me.

+1,同意,发展到后面,k8s方式的部署helm-chart这种形式应该是必然的,目前暂时只作为【安装方式】文档的形式,先这么提供给社区了

@UlricQin
Copy link
Contributor Author

如果配置项过多的话,建议后面单独开一个 cprobe-helm-chartrepo 来单独维护,这个我有兴趣,可以 assign to me.

好的,每个插件确实都有一坨配置。我在 cprobe 这个 github group 下创建个 helm-chart repo 来维护?或者你在自己的账号下创建个 cprobe-helm-chart 的 repo 来维护吧?然后把链接在这个 issue 下面 comment 出来即可。后面新用户看到安装文档就都可以看到了也。

@crossoverJie
Copy link
Contributor

我在 cprobe 这个 github group 下创建个 helm-chart repo 来维护?

还是建议在这个 group 下新建一个 repo 吧,这样社区感兴趣也都可以来维护了。

@UlricQin
Copy link
Contributor Author

我在 cprobe 这个 github group 下创建个 helm-chart repo 来维护?

还是建议在这个 group 下新建一个 repo 吧,这样社区感兴趣也都可以来维护了。

https://github.com/cprobe/helm-chart 建好了

@gold-fisher
Copy link

gold-fisher commented Dec 6, 2023

  • cprobe 因为是探针,作为 Deployment 部署没问题的
  • 副本数量就设置为1即可,如果挂了会被自动拉起,由K8s保证高可用,简单粗暴
  • hostPath 是不合理的,因为 pod 会漂移,最好是使用 configmap 之类的来管理 conf.d 下的配置
  • 目前的版本不用暴露 service,虽然内置了 HTTP 服务,不过这个 HTTP 服务目前还没啥用,所以可以不暴露 service

感觉探针类的,作为DaemonSet是不是更好一些? @UlricQin

@UlricQin
Copy link
Contributor Author

UlricQin commented Dec 6, 2023

  • cprobe 因为是探针,作为 Deployment 部署没问题的
  • 副本数量就设置为1即可,如果挂了会被自动拉起,由K8s保证高可用,简单粗暴
  • hostPath 是不合理的,因为 pod 会漂移,最好是使用 configmap 之类的来管理 conf.d 下的配置
  • 目前的版本不用暴露 service,虽然内置了 HTTP 服务,不过这个 HTTP 服务目前还没啥用,所以可以不暴露 service

感觉探针类的,作为DaemonSet是不是更好一些? @UlricQin

用DaemonSet完蛋了,所有数据重复采集N次

@zhangwenhui115
Copy link

您好,有两个问题:
1、是否支持从consul_sd_configs自动发现呢
2、配置好插件后,可以远程写入到vm,但是自带的target和metrics接口都是404,是什么原因?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

5 participants