Q:非洲食人族的酋长吃什么?

Stable Diffusion 解析:探寻 AI 绘画背后的科技神秘

AI 绘画发展史

在谈论 Stable Diffusion 之前,有必要先了解 AI 绘画的发展历程。

早在 2012 年,华人科学家吴恩达领导的团队训练出了当时世界上最大的深度学习网络。这个网络能够自主学习识别猫等物体,并在短短三天时间内绘制出了一张模糊但可辨识的猫图。尽管这张图片很模糊,但它展示了深度学习在图像识别方面的潜力。

到了 2014 年,加拿大蒙特利尔大学的谷歌科学家 Ian Goodfellow 提出了生成对抗网络 GAN 的算法,这一算法一度成为 AI 生成绘画的主流方向。GAN 的原理是通过训练两个深度神经网络模型——生成器 Generator 和判别器 Discriminator ,使得生成器能够生成与真实数据相似的新数据样本,并且判别器可以准确地区分生成器生成的假样本和真实数据。GAN 的核心思想是博弈,生成器试图欺骗判别器,而判别器则努力辨别真伪,二者相互对抗、相互协作,最终实现高质量的数据生成效果。

2016 年,基于 GAN 的第一个文本到图像模型 GAN-INT-CLS 问世,证明了 GAN 在从文本生成图像方面的可行性,为各类基于 GAN 的有条件图像生成模型的涌现打开了大门。然而,GAN 在训练过程中很容易出现不稳定或崩溃的情况,因此难以大规模应用。

同年 10 月,NVIDIA 提出了 ProgressiveGAN,通过逐渐增加神经网络规模生成高分辨率图像,从而降低了模型训练难度并提高了生成质量,为后来的 StyleGAN 的崛起铺平了道路。

2017 年,谷歌发表了著名论文《Attention Is All You Need》,提出了 Transformer 结构,随后在自然语言处理领域大放异彩;虽然 Transformer 是为了解决自然语言处理问题而设计的,但它在图像生成领域也显示了巨大的潜力。2020 年,他们又提出了 ViT 概念,尝试用 Transformer 结构替代传统的卷积神经网络 CNN 结构在计算机视觉中的应用。

2020 年出现了转折。加州大学伯克利分校提出了众所周知的去噪扩散概率模型 DDPM,简化了原有模型的损失函数,将训练目标转变为预测当前步添加的噪声信息,极大降低了训练难度,并将网络模块由全卷积网络替换为 Unet,提升了模型的表达能力。

2021 年 1 月,OpenAI 发布了基于 VQVAE 模型的 DALL-E 和 CLIP 模型 Contrastive Language-Image Pre-Training,它们分别用于文本到图像生成和文本与图像之间的对比学习。这让 AI 似乎第一次真正“理解”了人类的描述并进行创作,激发了人们前所未有的对 AI 绘画的热情。2021 年 10 月,谷歌发布的 Disco Diffusion 模型以其惊人的图像生成效果拉开了扩散模型的时代序幕。

2022 年 2 月,由一些开源社区的工程师开发的基于扩散模型的 AI 绘图生成器 Disco Diffusion 推出。从那时起,AI 绘画进入了快速发展的轨道,潘多拉魔盒已然打开。Disco Diffusion 相比传统的 AI 模型更加易用,研究人员建立了完善的帮助文档和社群,越来越多的人开始关注它。同年 3 月,由 Disco Diffusion 核心开发人员参与开发的 AI 生成器 MidJourney 正式发布。MidJourney 选择搭载在 Discord 平台,借助聊天式的人机交互方式,使得操作更加简便,而且无需复杂的参数调节,只需向聊天窗口输入文字就可以生成图像。

更重要的是,MidJourney 生成的图片效果非常惊艳,以至于普通人几乎无法分辨出其生成的作品是否是由 AI 绘制的。在 MidJourney 发布 5 个月后,美国科罗拉多州博览会的艺术比赛评选出了结果,一幅名为《太空歌剧院》的画作获得了第一名,然而其并非人类画师的作品,而是由名为 MidJourney 的人工智能创作的。

当参赛者公布这幅作品是由 AI 绘制时,引发了许多人类画家的愤怒和焦虑。

2022 年 4 月 10 日,之前提到的 OpenAI 的 DALL·E 2 发布了。无论是 Disco Diffusion 还是 MidJourney,细心观察后仍然能够看出其是由 AI 生成的,但 DALL·E 2 生成的图像已经无法与人类作品区分开了。

Stable Diffusion

2022 年 7 月 29 日,由 Stability.AI 公司研发的 Stable Diffusion 的 AI 生成器开始内测。人们发现用它生成的 AI 绘画作品质量堪比 DALL·E 2,而且限制更少。Stable Diffusion 的内测共分 4 波,邀请了 15000 名用户参与,仅仅十天后,就有一千七百万张图片通过它生成。最关键的是,Stable Diffusion 的开发公司 Stability AI 秉承着开源的理念,“AI by the people,for the people”,这意味着任何人都可以在本地部署自己的 AI 绘画生成器,真正实现了每个人“只要你会说话,就能够创造出一幅画”。开源社区 HuggingFace 迅速适配了它,使得个人部署变得更加简单;而开源工具 Stable-diffusion-webui 则将多种图像生成工具集成在一起,甚至可以在网络端微调模型、训练个人专属模型,备受好评,在 GitHub 上获得了 3.4 万颗星,使得扩散生成模型彻底走出了大型服务,向个人部署迈进。

2022 年 11 月,Stable Diffusion 2.0 发布,新版本生成的分辨率提高了四倍,生成速度也更快。

Stable Diffusion 基于 Latent Diffusion Models,将最耗时的扩散过程放在低维度的潜变量空间,大大降低了算力需求以及个人部署门槛。它使用的潜空间编码缩减因子为 8,换句话说,图像的长和宽被缩减为原来的八分之一,例如一个 512512 的图像在潜空间中直接变为 6464,从而节省了 64 倍的内存!在此基础上,Stable Diffusion 还降低了性能要求。不仅可以快速(以秒计算)生成一张细节丰富的 512512 图像,而且只需一张英伟达消费级的 8GB 2060 显卡。如果没有这个空间压缩转换,它将需要一张 512GB 显存的超级显卡。按照显卡硬件的发展规律,消费者至少需要 8-10 年的时间才能享受到这类应用。这个算法上的重要迭代使得 AI 作画提前进入了每个人的生活。

在本文中,我们探讨了 Stable Diffusion 的发展历程以及对其的介绍。如果你同样是 AI 绘画的爱好者,欢迎和我一起交流探讨。未来,我将持续更新这个系列,分享 Stable Diffusion 的教程以及其他 AI 绘画软件的教学内容。如果您喜欢这些内容,欢迎关注我们!感谢您的阅读,期待在下一期再与您相见!

继续阅读 »

AI 绘画发展史

在谈论 Stable Diffusion 之前,有必要先了解 AI 绘画的发展历程。

早在 2012 年,华人科学家吴恩达领导的团队训练出了当时世界上最大的深度学习网络。这个网络能够自主学习识别猫等物体,并在短短三天时间内绘制出了一张模糊但可辨识的猫图。尽管这张图片很模糊,但它展示了深度学习在图像识别方面的潜力。

到了 2014 年,加拿大蒙特利尔大学的谷歌科学家 Ian Goodfellow 提出了生成对抗网络 GAN 的算法,这一算法一度成为 AI 生成绘画的主流方向。GAN 的原理是通过训练两个深度神经网络模型——生成器 Generator 和判别器 Discriminator ,使得生成器能够生成与真实数据相似的新数据样本,并且判别器可以准确地区分生成器生成的假样本和真实数据。GAN 的核心思想是博弈,生成器试图欺骗判别器,而判别器则努力辨别真伪,二者相互对抗、相互协作,最终实现高质量的数据生成效果。

2016 年,基于 GAN 的第一个文本到图像模型 GAN-INT-CLS 问世,证明了 GAN 在从文本生成图像方面的可行性,为各类基于 GAN 的有条件图像生成模型的涌现打开了大门。然而,GAN 在训练过程中很容易出现不稳定或崩溃的情况,因此难以大规模应用。

同年 10 月,NVIDIA 提出了 ProgressiveGAN,通过逐渐增加神经网络规模生成高分辨率图像,从而降低了模型训练难度并提高了生成质量,为后来的 StyleGAN 的崛起铺平了道路。

2017 年,谷歌发表了著名论文《Attention Is All You Need》,提出了 Transformer 结构,随后在自然语言处理领域大放异彩;虽然 Transformer 是为了解决自然语言处理问题而设计的,但它在图像生成领域也显示了巨大的潜力。2020 年,他们又提出了 ViT 概念,尝试用 Transformer 结构替代传统的卷积神经网络 CNN 结构在计算机视觉中的应用。

2020 年出现了转折。加州大学伯克利分校提出了众所周知的去噪扩散概率模型 DDPM,简化了原有模型的损失函数,将训练目标转变为预测当前步添加的噪声信息,极大降低了训练难度,并将网络模块由全卷积网络替换为 Unet,提升了模型的表达能力。

2021 年 1 月,OpenAI 发布了基于 VQVAE 模型的 DALL-E 和 CLIP 模型 Contrastive Language-Image Pre-Training,它们分别用于文本到图像生成和文本与图像之间的对比学习。这让 AI 似乎第一次真正“理解”了人类的描述并进行创作,激发了人们前所未有的对 AI 绘画的热情。2021 年 10 月,谷歌发布的 Disco Diffusion 模型以其惊人的图像生成效果拉开了扩散模型的时代序幕。

2022 年 2 月,由一些开源社区的工程师开发的基于扩散模型的 AI 绘图生成器 Disco Diffusion 推出。从那时起,AI 绘画进入了快速发展的轨道,潘多拉魔盒已然打开。Disco Diffusion 相比传统的 AI 模型更加易用,研究人员建立了完善的帮助文档和社群,越来越多的人开始关注它。同年 3 月,由 Disco Diffusion 核心开发人员参与开发的 AI 生成器 MidJourney 正式发布。MidJourney 选择搭载在 Discord 平台,借助聊天式的人机交互方式,使得操作更加简便,而且无需复杂的参数调节,只需向聊天窗口输入文字就可以生成图像。

更重要的是,MidJourney 生成的图片效果非常惊艳,以至于普通人几乎无法分辨出其生成的作品是否是由 AI 绘制的。在 MidJourney 发布 5 个月后,美国科罗拉多州博览会的艺术比赛评选出了结果,一幅名为《太空歌剧院》的画作获得了第一名,然而其并非人类画师的作品,而是由名为 MidJourney 的人工智能创作的。

当参赛者公布这幅作品是由 AI 绘制时,引发了许多人类画家的愤怒和焦虑。

2022 年 4 月 10 日,之前提到的 OpenAI 的 DALL·E 2 发布了。无论是 Disco Diffusion 还是 MidJourney,细心观察后仍然能够看出其是由 AI 生成的,但 DALL·E 2 生成的图像已经无法与人类作品区分开了。

Stable Diffusion

2022 年 7 月 29 日,由 Stability.AI 公司研发的 Stable Diffusion 的 AI 生成器开始内测。人们发现用它生成的 AI 绘画作品质量堪比 DALL·E 2,而且限制更少。Stable Diffusion 的内测共分 4 波,邀请了 15000 名用户参与,仅仅十天后,就有一千七百万张图片通过它生成。最关键的是,Stable Diffusion 的开发公司 Stability AI 秉承着开源的理念,“AI by the people,for the people”,这意味着任何人都可以在本地部署自己的 AI 绘画生成器,真正实现了每个人“只要你会说话,就能够创造出一幅画”。开源社区 HuggingFace 迅速适配了它,使得个人部署变得更加简单;而开源工具 Stable-diffusion-webui 则将多种图像生成工具集成在一起,甚至可以在网络端微调模型、训练个人专属模型,备受好评,在 GitHub 上获得了 3.4 万颗星,使得扩散生成模型彻底走出了大型服务,向个人部署迈进。

2022 年 11 月,Stable Diffusion 2.0 发布,新版本生成的分辨率提高了四倍,生成速度也更快。

Stable Diffusion 基于 Latent Diffusion Models,将最耗时的扩散过程放在低维度的潜变量空间,大大降低了算力需求以及个人部署门槛。它使用的潜空间编码缩减因子为 8,换句话说,图像的长和宽被缩减为原来的八分之一,例如一个 512512 的图像在潜空间中直接变为 6464,从而节省了 64 倍的内存!在此基础上,Stable Diffusion 还降低了性能要求。不仅可以快速(以秒计算)生成一张细节丰富的 512512 图像,而且只需一张英伟达消费级的 8GB 2060 显卡。如果没有这个空间压缩转换,它将需要一张 512GB 显存的超级显卡。按照显卡硬件的发展规律,消费者至少需要 8-10 年的时间才能享受到这类应用。这个算法上的重要迭代使得 AI 作画提前进入了每个人的生活。

在本文中,我们探讨了 Stable Diffusion 的发展历程以及对其的介绍。如果你同样是 AI 绘画的爱好者,欢迎和我一起交流探讨。未来,我将持续更新这个系列,分享 Stable Diffusion 的教程以及其他 AI 绘画软件的教学内容。如果您喜欢这些内容,欢迎关注我们!感谢您的阅读,期待在下一期再与您相见!

收起阅读 »

通过 Helm Chart 部署 Easysearch

bg.jpg

Easysearch 可以通过 Helm 快速部署了,快来看看吧!

Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com

使用 Helm 部署 Easysearch 有两个前提条件:

我们先按照 Chart 仓库的说明来快速部署一下。

~ helm repo add infinilabs https://helm.infinilabs.com
~ cat << EOF | kubectl apply -n test -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: easysearch-ca-issuer
spec:
  selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: easysearch-ca-certificate
spec:
  commonName: easysearch-ca-certificate
  duration: 87600h0m0s
  isCA: true
  issuerRef:
    kind: Issuer
    name: easysearch-ca-issuer
  privateKey:
    algorithm: ECDSA
    size: 256
  renewBefore: 2160h0m0s
  secretName: easysearch-ca-secret
EOF
~ helm install easysearch infinilabs/easysearch -n test

执行上面的两个命令之后,查看一下部署情况

~ kubectl get pod -n test
NAME           READY   STATUS    RESTARTS   AGE
easysearch-0   1/1     Running   0          38s
~ kubectl get svc -n test
NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
easysearch-svc-headless   ClusterIP   None         <none>        9200/TCP,9300/TCP   67s
~ kubectl exec -n test easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200
Defaulted container "easysearch" out of: easysearch, init-config (init)
{
  "name" : "easysearch-0",
  "cluster_name" : "infinilabs",
  "cluster_uuid" : "JwhwwWHMQKy8l6_US7rB1A",
  "version" : {
    "distribution" : "easysearch",
    "number" : "1.5.0",
    "distributor" : "INFINI Labs",
    "build_hash" : "5b5b117bc43e6793e7bb0cd8bd83567a5ef35be0",
    "build_date" : "2023-09-07T14:55:21.232870Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.2",
    "minimum_wire_lucene_version" : "7.7.0",
    "minimum_lucene_index_compatibility_version" : "7.7.0"
  },
  "tagline" : "You Know, For Easy Search!"
}

通过上面的验证,我们可以看到 Easysearch 已经部署完成,是不是很方便。

按照 Chart 仓库的指导说明部署的是一个单节点集群,那如果要部署多节点的要怎么办呢?下面让我们来研究一下 Easysearch Chart 包的源码 https://github.com/infinilabs/helm-charts/tree/main/charts/easysearch

熟悉 Chart 包结构的小伙伴都清楚,Chart 包的变量配置一般都是在 values.yaml 文件中配置的。

我们先来看一下默认的 values.yaml 文件内容(这里只截选了一些可能需要变更的配置,完整内容请查阅源码):

  • pod 副本数以及使用资源的配置
replicaCount: 1
resources:
  limits:
    cpu: 1000m
    memory: 2Gi
  requests:
    cpu: 1000m
    memory: 2Gi
  • 使用存储类型以及容量的配置
storageClassName: local-path
dataVolumeStorage: 100Gi
  • 集群名、主节点列表以及节点角色配置
clusterName: infinilabs
masterHosts: '"easysearch-0"'
discoverySeedHosts: '"easysearch-0.easysearch-svc-headless"'
nodeRoles: '"master","data","ingest","remote_cluster_client"'

根据研究源码的结果,多节点集群的部署只需要我们调整部署的 pod 副本数、集群名、主节点列表以及节点角色这几个配置。下面让我们来实践一下:

1、集群规划

集群名:es-test

规模:3 主节点 + 3 数据节点 + 2 协调节点

2、Chart 的版本名

主节点:es-test-master

数据节点:es-test-data

协调节点:es-test-coordinate

3、根据节点角色创建不同的 values.yaml 文件

  • es-test-master.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"master","ingest","remote_cluster_client"'
  • es-test-data.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"data","ingest","remote_cluster_client"'
  • es-test-coordinate.yaml
replicaCount: 2
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: ""

4、使用各节点角色的配置文件部署

~ helm install es-test-master infinilabs/easysearch -n test -f es-test-master.yaml
~ helm install es-test-data infinilabs/easysearch -n test -f es-test-data.yaml
~ helm install es-test-coordinate infinilabs/easysearch -n test -f es-test-coordinate.yaml

5、验证

~ kubectl get pod -n test|grep es-test
es-test-master-easysearch-0       1/1     Running   0          5m57s
es-test-data-easysearch-0         1/1     Running   0          5m29s
es-test-coordinate-easysearch-0   1/1     Running   0          5m10s
es-test-master-easysearch-1       1/1     Running   0          4m57s
es-test-data-easysearch-1         1/1     Running   0          4m29s
es-test-coordinate-easysearch-1   1/1     Running   0          4m10s
es-test-master-easysearch-2       1/1     Running   0          3m56s
es-test-data-easysearch-2         1/1     Running   0          3m29s
~ kubectl exec -n test es-test-master-easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200/_cat/nodes?v
Defaulted container "easysearch" out of: easysearch, init-config (init)
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.42.0.130           12          63  12    1.53    2.67     2.11 -         -      es-test-coordinate-easysearch-0
10.42.0.136           53          65  52    1.53    2.67     2.11 dir       -      es-test-data-easysearch-1
10.42.0.139            6          63  14    1.53    2.67     2.11 -         -      es-test-coordinate-easysearch-1
10.42.0.133           10          63  14    1.53    2.67     2.11 imr       -      es-test-master-easysearch-1
10.42.0.149           58          65  59    1.53    2.67     2.11 dir       -      es-test-data-easysearch-2
10.42.0.124           53          68  35    1.53    2.67     2.11 imr       *      es-test-master-easysearch-0
10.42.0.127           56          65  46    1.53    2.67     2.11 dir       -      es-test-data-easysearch-0
10.42.0.146           15          63  18    1.53    2.67     2.11 imr       -      es-test-master-easysearch-2

至此,多集群已部署完成。

关于 Easysearch

about easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。

官网文档:https://www.infinilabs.com/docs/latest/easysearch

下载地址:https://www.infinilabs.com/download

继续阅读 »

bg.jpg

Easysearch 可以通过 Helm 快速部署了,快来看看吧!

Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com

使用 Helm 部署 Easysearch 有两个前提条件:

我们先按照 Chart 仓库的说明来快速部署一下。

~ helm repo add infinilabs https://helm.infinilabs.com
~ cat << EOF | kubectl apply -n test -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: easysearch-ca-issuer
spec:
  selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: easysearch-ca-certificate
spec:
  commonName: easysearch-ca-certificate
  duration: 87600h0m0s
  isCA: true
  issuerRef:
    kind: Issuer
    name: easysearch-ca-issuer
  privateKey:
    algorithm: ECDSA
    size: 256
  renewBefore: 2160h0m0s
  secretName: easysearch-ca-secret
EOF
~ helm install easysearch infinilabs/easysearch -n test

执行上面的两个命令之后,查看一下部署情况

~ kubectl get pod -n test
NAME           READY   STATUS    RESTARTS   AGE
easysearch-0   1/1     Running   0          38s
~ kubectl get svc -n test
NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
easysearch-svc-headless   ClusterIP   None         <none>        9200/TCP,9300/TCP   67s
~ kubectl exec -n test easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200
Defaulted container "easysearch" out of: easysearch, init-config (init)
{
  "name" : "easysearch-0",
  "cluster_name" : "infinilabs",
  "cluster_uuid" : "JwhwwWHMQKy8l6_US7rB1A",
  "version" : {
    "distribution" : "easysearch",
    "number" : "1.5.0",
    "distributor" : "INFINI Labs",
    "build_hash" : "5b5b117bc43e6793e7bb0cd8bd83567a5ef35be0",
    "build_date" : "2023-09-07T14:55:21.232870Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.2",
    "minimum_wire_lucene_version" : "7.7.0",
    "minimum_lucene_index_compatibility_version" : "7.7.0"
  },
  "tagline" : "You Know, For Easy Search!"
}

通过上面的验证,我们可以看到 Easysearch 已经部署完成,是不是很方便。

按照 Chart 仓库的指导说明部署的是一个单节点集群,那如果要部署多节点的要怎么办呢?下面让我们来研究一下 Easysearch Chart 包的源码 https://github.com/infinilabs/helm-charts/tree/main/charts/easysearch

熟悉 Chart 包结构的小伙伴都清楚,Chart 包的变量配置一般都是在 values.yaml 文件中配置的。

我们先来看一下默认的 values.yaml 文件内容(这里只截选了一些可能需要变更的配置,完整内容请查阅源码):

  • pod 副本数以及使用资源的配置
replicaCount: 1
resources:
  limits:
    cpu: 1000m
    memory: 2Gi
  requests:
    cpu: 1000m
    memory: 2Gi
  • 使用存储类型以及容量的配置
storageClassName: local-path
dataVolumeStorage: 100Gi
  • 集群名、主节点列表以及节点角色配置
clusterName: infinilabs
masterHosts: '"easysearch-0"'
discoverySeedHosts: '"easysearch-0.easysearch-svc-headless"'
nodeRoles: '"master","data","ingest","remote_cluster_client"'

根据研究源码的结果,多节点集群的部署只需要我们调整部署的 pod 副本数、集群名、主节点列表以及节点角色这几个配置。下面让我们来实践一下:

1、集群规划

集群名:es-test

规模:3 主节点 + 3 数据节点 + 2 协调节点

2、Chart 的版本名

主节点:es-test-master

数据节点:es-test-data

协调节点:es-test-coordinate

3、根据节点角色创建不同的 values.yaml 文件

  • es-test-master.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"master","ingest","remote_cluster_client"'
  • es-test-data.yaml
replicaCount: 3
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: '"data","ingest","remote_cluster_client"'
  • es-test-coordinate.yaml
replicaCount: 2
clusterName: es-test
masterHosts: '"es-test-master-easysearch-0","es-test-master-easysearch-1","es-test-master-easysearch-2"'
discoverySeedHosts: '"es-test-master-easysearch-0.es-test-master-easysearch-svc-headless","es-test-master-easysearch-1.es-test-master-easysearch-svc-headless","es-test-master-easysearch-2.es-test-master-easysearch-svc-headless"'
nodeRoles: ""

4、使用各节点角色的配置文件部署

~ helm install es-test-master infinilabs/easysearch -n test -f es-test-master.yaml
~ helm install es-test-data infinilabs/easysearch -n test -f es-test-data.yaml
~ helm install es-test-coordinate infinilabs/easysearch -n test -f es-test-coordinate.yaml

5、验证

~ kubectl get pod -n test|grep es-test
es-test-master-easysearch-0       1/1     Running   0          5m57s
es-test-data-easysearch-0         1/1     Running   0          5m29s
es-test-coordinate-easysearch-0   1/1     Running   0          5m10s
es-test-master-easysearch-1       1/1     Running   0          4m57s
es-test-data-easysearch-1         1/1     Running   0          4m29s
es-test-coordinate-easysearch-1   1/1     Running   0          4m10s
es-test-master-easysearch-2       1/1     Running   0          3m56s
es-test-data-easysearch-2         1/1     Running   0          3m29s
~ kubectl exec -n test es-test-master-easysearch-0 -it -- curl -ku'admin:admin' https://localhost:9200/_cat/nodes?v
Defaulted container "easysearch" out of: easysearch, init-config (init)
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.42.0.130           12          63  12    1.53    2.67     2.11 -         -      es-test-coordinate-easysearch-0
10.42.0.136           53          65  52    1.53    2.67     2.11 dir       -      es-test-data-easysearch-1
10.42.0.139            6          63  14    1.53    2.67     2.11 -         -      es-test-coordinate-easysearch-1
10.42.0.133           10          63  14    1.53    2.67     2.11 imr       -      es-test-master-easysearch-1
10.42.0.149           58          65  59    1.53    2.67     2.11 dir       -      es-test-data-easysearch-2
10.42.0.124           53          68  35    1.53    2.67     2.11 imr       *      es-test-master-easysearch-0
10.42.0.127           56          65  46    1.53    2.67     2.11 dir       -      es-test-data-easysearch-0
10.42.0.146           15          63  18    1.53    2.67     2.11 imr       -      es-test-master-easysearch-2

至此,多集群已部署完成。

关于 Easysearch

about easysearch

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。

官网文档:https://www.infinilabs.com/docs/latest/easysearch

下载地址:https://www.infinilabs.com/download

收起阅读 »

潜心一技、做到极致!——Elastic认证工程师之路

2020年2月3日我参加Elastic认证工程师考试,2020年2月5日中午得到认证结果:通过考试。

Snipaste_masaioke.png

趁热打铁,将Elastic认证工程师考试相关内容、经验教训等和盘而出,希望对后续参加考试的同学有所帮助。

1、Elastic工程师有什么用?

An Elastic Certified Engineer possesses the skills and is able to perform the tasks necessary to build a complete Elasticsearch solution, including the ability to install, configure, and manage Elasticsearch clusters, index data into those clusters, and query and analyze the indexed data. To obtain this certification, the candidate completed a series of challenging, real-world, hands-on tasks within three hours performed on a collection of Elasticsearch clusters.

通过后,授予的徽章下方会有如上一段话。

Elastic认证工程师拥有构建完整的Elasticsearch解决方案的技能。包含:包括部署、配置和管理Elasticsearch集群;将数据索引到这些集群中以及查询和分析索引数据的能力。 为了获得此认证,候选人在三个小时内在多个Elasticsearch集群实战完成了一系列具有挑战性的实任务。

2、中国有多少人考过了这个考试?

截止2019年12月7日,中国的Elastic认证工程师只有21位。全球:550位。

我在参加大会后晚上的总结文章中提到:

  • 很震撼、很稀缺。
  • 思考:从经济学角度,稀缺就意味着;同时稀缺也意味着机会

3、我为什么要考?

我非常喜欢赢在中国的主题曲“在路上”(刘欢演唱、张瑞敏 /王利芬等作词)。

"那一天, 我不得已上路

为不安分的心, 为自尊的生存

为自我的证明......“。

这首歌是创业者的励志歌曲,对学生、上班族同样适用。

不知道你是否和我一样,在人生的道路上,或多或少总有那么几个人说不行。

  • 你上学时,他说你学习不行;
  • 你工作了,他说你技术不行;
  • 你搞ES了,他说你水平不行;
  • 你写博客了,他说你是嘴炮;
  • 你负责产品了,他说你协调不行;
  • 你带团队了,他说你管理不行; ......

最好的办法,就是不理会外界的看法,做好自己认为对的东西、坚持自己的坚持!

但除了不理会,我更会以以下的方式激励自己:

1949年9月21日,伟大领袖毛主席在中国人民政治协商会议第一次全体会议上发表的开幕词中提到:

  • 让那些内外反动派在我们面前发抖吧!
  • 让他们去说我们这也不行那也不行吧!
  • 中国人民的不屈不挠的努力。
  • 必将稳步地达到自己的目的。

考取Elastic认证考试不为别的,就是为了证明自己

4、Elasticsearch认证考什么?

一图胜千言。

Elastic认证考试考纲.png

5、怎么准备Elastic认证考试?

5.1 站在巨人的肩上

先别着急上手,先做足提前工作,看看别人是如何通过的?

一定要有全球视野,国内通过经验分享,线上的有:wood大叔、魏彬老师(中国第一位)、阮一鸣老师、腾讯云慕容兄、XX快运的一技术大佬等。

线下的有杭州站的一次meetup分享、2019开发者大会的7位大佬的面对面交流分享。

国外的论坛、社区、博客等也有很多分享,要一并关注。

别人的宝贵的经验、教训能节省我们不少时间。

举例1:做足考试前的准备工作。

  • 考试的书桌或者办公桌要除了电脑、键盘、鼠标外没有任何其他物品。
  • 如果是笔记本电脑,不要有外接显示器。
  • 准备有包含和自己注册考试名字拼音一致的证件(护照或港澳通行证),身份证需要提前邮件申请报备才可以。
  • 提前检查摄像头确保好使,考试期间摄像头要全程打开、桌面要全程共享。 提前做足准备,避免考试的时候忙乱,影响考试节奏。

举例2:15分钟的检查环节,通过chat对话框进行,对方全是英文。

应试者是可以发中文的。 这是开发者大会听到的经验。我考试直接用上了,英文敲的毕竟有点费劲,对方不懂中文,但是有谷歌翻译,一样保证可以顺畅的沟通。 主要是节省宝贵的考试时间。

举例3:提前准备好VPN。

Snipaste_2020-02-07_13-38-47.png

网络不通,复习的再好也会有很大的挫败感。 我自己考试提前准备了vpn,但考到一半,vpn出故障,直接本地网络连接的,那个卡啊,苦的一逼,直接掉线5次+

5.2 熟悉考纲

明白不考什么、考什么很重要。

大家都知道:Elastic公司发展迅猛,早已由单个的Elasticsearch发展为ELK Stack。

包含但不限于:Elasticsearch、kibana、logstash、beats等。

但,Elasticsearch认证考试只考Elasticsearch,不考logstash、beats、kibana等。

kibana还得算个例外,基于xpack构建多用户、权限设置可以命令行实现,但通过kibana更快捷,考试可不可以直接kibana操作呢。

这个问题,我提前做了邮件咨询、回复如下:

Snipaste_2020-02-07_13-39-02.png

要熟悉到什么程度呢? 对着考纲,把要考的知识点分布的官方文档的位置,能O(1)时间找出来

5.3 刻意学习Elastic官方文档

单纯的看文档的确很枯燥、容易困,所以,要刻意练习。

如何刻意学习?

5.3.1 搭建有随手可得的集群环境。

  • 方式一:本机docker集群(三节点)。
  • 方式二:买云服务器。 我是买的云服务器,2核4GB,最多部署二个节点。足够,很多多节点任务,2节点演练也可以。

不建议:本地windows环境搭建集群。

原因:考试时centos7的环境。windows和linux毕竟不完全一致。

要模拟,就是近实战环境模拟。

5.3.2 平时遇到任何Elastic问题,先从文档找答案。

  • 1、考试环境是7.2版本,默认最新7.5+,需要切换下版本。 版本不一样,文档结构是不一样的。

  • 2、刻意熟悉文档。 注意:考试除了官方文档,不允许google等任何第三方文档的。

遇到问题,通过google、stackoverflow、elastic论坛找答案固然很快, 但,这样少了一次熟悉文档的机会。

  • 3、官方文档支持搜索,但万不得已,不建议用。

原因1:官方文档的搜索不好用。

原因2:熟悉文档结构后,直接锁定目标比搜索要快很多。

5.3.3 一定要动手敲

一定要动手敲!一定要动手敲!一定要动手敲! 重要的事情说三遍!

看一遍,不等于理解了。

理解了,不等于会实战了。

只有实战+理解了,考试才有信息和把握。

考试时kibana环境,平时:head插件、cerebro、postman都可以配置集群。

但,我们从平时就使用kibana dev-tool实现。

做到:平时如考试、考试如平时。

5.4 熟悉考试题型

不考:选择题、填空题、问答题、原理题。

全部都是英文实战题。

  • 题型一、实战部署题。

举例:冷热集群架构部署。

Snipaste_2020-02-07_13-39-11.png

  • 题型二、实战DSL题。

举例:满足给定条件的自定义模板、自定义查询、聚合、reindex+script等。

Snipaste_2020-02-07_13-39-19.png

6、Elastic认证经验、教训

6.1 备好vpn

血淋淋教训告诉你:如果条件允许,建议备两套美国线路的vpn。

我自己深有体会,网络不好,自己会着急,很无助但没有任何解决办法。

所以,工作要做在平时。

6.2 不打无准备之仗

按照考纲、考点刷文档、通过kibana实践。

考试试题中规中矩,没有很复杂的难题,但切记要做最充分的准备。

确保每个知识点自己kibana都敲过3遍以上。

部分点如:批量写入文档、查询、聚合、自定义Mapping常规操作,建议熟悉到不用翻文档,直接能敲出来。

6.3 盲点、疑点可能就是考点

不要有知识盲区,因为:任何你的知识盲区,都可能是考点

把工作做在平时,模棱两可的点,提前识别到,提前解决了,考试就剩下: 复制、黏贴、修改、提交过程了。

举例:上文提到的基于kibana配置用户角色。

举例:most_fields, best_fields, cross_fileld的核心区别?

6.4 考试常规技巧依然适用

  • 第一:进入考试环境后,先看一下有几个集群。

我考试时候是4个集群,1个四节点,其他3个单节点。

因为:集群环境是你后面所有操作的前置条件。

  • 第二:通读一遍考题。 目的1:是识别一下,哪些自己熟悉、哪些不熟悉。

建议:先易后难、先简后繁

目的2:知道哪些单节点环境,哪些多节点。

建议:先搞定单节点的,多节点集群的留到最后。

  • 第三:会多少,写多少。

我猜测考试会按点给分的,最后给出一个考试过的线(待核实)。

但,空着肯定是不行的。

7、Elastic认证常见问题

征集了一些大家最关心问题,梳理总结如下。

7.1 我英语太烂了,看不懂考题怎么办?

第一:英语四级就基本没问题能看懂题目,没有六级、考研的长难句,都是中规中矩试题,不复杂。

第二:平时看文档尝试关掉翻译。

第三:去年开发者大会,有个分享嘉宾说他考试时候开了谷歌翻译,也过了。

第三点没有求证,我建议可以发个邮件给考试组问一下,如果允许那就更好了,避免了理解歧义导致实战出错。

7.2 试错成本太高了,400美金肉疼,怎么办?

的确,真心肉疼。

提醒:多关注一下官方的活动。

  • 活动一:买一赠一活动。

也就是说:购买一次考试,赠送一次补考机会,补考1年内有效。

  • 活动二:75折扣活动。

去年下半年截至2020年1月31日有75折活动,能省100美金。

所以,做好充分准备争取一次过很重要。

7.3 认证考试有题库吗?

官方没有提供。

不过国内阮一鸣老师做了总结、国外一德国博士也做了总结。

我都做了一遍并梳理出答案。欢迎留言交流。

7.4 很难考吗?

有一定难度。体现在两个层面。

  • 第一:好多考点,平时我们不见得常用。

举例:自定义分析部分的同义词synonym filter、跨集群搜索、多机架分片均衡分配。

  • 第二:考试多少会设置一点点障碍。

我本次考试的4个集群全都没有启动,需要自己按条件部署后启动。

  • 第三:考试时间3个小时。

10-12道题,在熟悉文档的前提下,每个题目都需要争分夺秒、分秒必争。

7.5 考取认证有什么用?

第一:Elastic总部官方认可。

来自Elastic官方的认可,不容小觑。是对你实践能力的认可。

第二:含金量高

  • Elastic官方、社区大佬wood大叔、极客时间阮一鸣老师都强调过这个证书含金量很高。

  • 他不同于工信部的软考、PMP考试考的是理论能力、理解能力,全国每年几万人甚至十几万人都能通过,甚至在校大学生背背也能通过,

Elastic认证没有实践过几乎100%通不过的

第三:“升职加薪”。

  • 如果你考虑换工作,可以作为很好的敲门砖。
  • 如果你是面试官,应聘者通过认证,基础的Elastic实战问题说明已经非常熟练了,极大的提高你的招聘质量。
  • 如果你是职场人士或在校学生族,熟悉考点的过程也是你加强Elastic认知的过程。

最强大脑Dr魏在得到的课程中提到:"认知科学成果表明,提取记忆过程,特别是用考试作为手段的提取方式,不仅有学习的作用,甚至比简单的重复学习效果更好。”

7.6 一次通过的吗?

很遗憾,我也不是一次性通过的。

  • 2019年7月份考过一次,当时只简单过了一遍文档,很多地方没有实际敲过,考试一紧张,11道题只完成8道。 没过总结的原因无非两字:不熟。其他都是借口。

  • 2019年12月7日参加完Elastic开发者大会后,很有触动,又开始重新准备考试,侧重实战。

7.7 有没有可参考的复习计划?

2019年下半年,杭州的一次meetup分享很受用,我按照他的表格做了知识点的梳理和大致实践规划。

Snipaste_2020-02-07_13-39-31.png

大致分三个阶段。

  • 阶段1:熟悉官方文档。

官方文档+案例敲一遍,相关数据可以使用kibana提供的3种数据集。

这个时候遇到的任何问题自己解决不了,都可以抛出来中英文社区讨论,直到彻底懂了。

  • 阶段2:真题模拟,记录不熟的知识点。

我记录的一些核心点如下:

(1)parent/child

(2)nested

(3)script+ingest pipeline

(4)function_score

(5)dis_max, multi_fields(cross fields, most_fields, best_fields)

(6)security+role

(7)search template

(8)cross cluster search

(10)custom analyzer

(11)shard allocation

(12)cluster diagnose 

(13)backup restore

(14)hot-ware deployment

(15)mapping muti-fields

(16)settings+analyzer+

(17)update+search+reindex script

(18) template+alias
  • 阶段3:查缺补漏,重点突击。

基础已经基本熟悉了,对于第二阶段发现的问题,细节再过一遍文档,查缺补漏,确保万无一失。

  • 阶段4:迎战考试。

快速翻文档和1-3环节技术点,多过几遍。能o(1)时间找到文档位置。

以上三个过程,全环节都需要实战演练。

1-3阶段可以放慢速度,求稳、求准。

第4阶段适度进展,迎战考试,确保没有遗漏,确保能最快时间定位文档。

7.8 这次考了哪些题?

1、terms聚合分析

2、跨集群检索

3、4节点跨集群分片副本感知分配

5、用户角色、用户名密码指定

6、动态模板template

7、reindex+ingest pipeline

8、检索+提升评分权重

9、自定义mapping+multi-fields

10、检索+排序+高亮+等

这次考试好几个题目的题干都很长

7.9 你考试花了多长时间?

  • 2019年12月8日重新定下目标考试,2020年2月3日参加考试。
  • 期间只有晚上10点到12点左右有时间。临考前2天准备了2个整天。
  • 中间有别的事情+春节,断过几天。

7.10 平时工作那么忙、哪有时间考试?

  • 的确,这是大家通病。年底都忙,过年也忙。
  • 自己挤时间,我为了准备考试,12月8日——2月5日,朋友圈彻底关闭、一切新闻客户端彻底删除。不狠一把,你都不知道自己有多厉害!
  • 期间也有想放弃的时候,就听一下俞敏洪一分钟励志演讲,管用!新东方的励志语录也萦绕在耳边“坚持下去不是因为我很坚强,而是我别无选择”。
  • 特殊期间,正是提升内功的绝佳时机。看别的只会让你焦虑和恐慌,做好自己就是对国家的贡献。
  • 如果你平时工作中就一直使用Elasticsearch,可以平时的时候刻意注意熟悉实践文档。我看腾讯大佬们的分享都很轻松,不用我写的这么“悲壮”。

8、考过了就牛逼了吗?

大错特错,考试说白了只能证明你文档熟+实践能力强。 并不能说明你底层原理熟悉+源码熟悉,离大佬还差十万八千里。 真正的大佬是:

  • 以medcl等大佬为代表的Elastic原厂技术团队;
  • 以wood大佬+阮一鸣等大佬为代表的大厂企业级实战派;
  • 以魏彬等大佬为代表的咨询专家团队;
  • 以张超等大佬为代表的源码原理派。

多向他们学习和求经,能获益良多。

9、小结

著名相声表演艺术家常宝华曾这样评价侯宝林大师:“在他面前,我就像不会(说相声)似的”。

我认为这句话对技术人员一样受用。技术的道路上,我们要谨记这句话。

  • 一方面:新技术层出不穷,不要抱残守缺,要拥抱变化。同时注意底层原理大多是相通的,要深挖,不要浮于表面

  • 另一方面:保持对技术的敬畏和好奇之心,热爱自己的热爱、坚持自己的坚持。

专研技术的同时要多向身边或者网上的牛人学习。一个人可能走得更快,但一群人走得更远

文章标题的来源自偶像俞敏洪老师公众号对粉丝的回复:

和大家共勉!

潜心一技、做到极致。

和你一起,死磕Elastic!

继续阅读 »

2020年2月3日我参加Elastic认证工程师考试,2020年2月5日中午得到认证结果:通过考试。

Snipaste_masaioke.png

趁热打铁,将Elastic认证工程师考试相关内容、经验教训等和盘而出,希望对后续参加考试的同学有所帮助。

1、Elastic工程师有什么用?

An Elastic Certified Engineer possesses the skills and is able to perform the tasks necessary to build a complete Elasticsearch solution, including the ability to install, configure, and manage Elasticsearch clusters, index data into those clusters, and query and analyze the indexed data. To obtain this certification, the candidate completed a series of challenging, real-world, hands-on tasks within three hours performed on a collection of Elasticsearch clusters.

通过后,授予的徽章下方会有如上一段话。

Elastic认证工程师拥有构建完整的Elasticsearch解决方案的技能。包含:包括部署、配置和管理Elasticsearch集群;将数据索引到这些集群中以及查询和分析索引数据的能力。 为了获得此认证,候选人在三个小时内在多个Elasticsearch集群实战完成了一系列具有挑战性的实任务。

2、中国有多少人考过了这个考试?

截止2019年12月7日,中国的Elastic认证工程师只有21位。全球:550位。

我在参加大会后晚上的总结文章中提到:

  • 很震撼、很稀缺。
  • 思考:从经济学角度,稀缺就意味着;同时稀缺也意味着机会

3、我为什么要考?

我非常喜欢赢在中国的主题曲“在路上”(刘欢演唱、张瑞敏 /王利芬等作词)。

"那一天, 我不得已上路

为不安分的心, 为自尊的生存

为自我的证明......“。

这首歌是创业者的励志歌曲,对学生、上班族同样适用。

不知道你是否和我一样,在人生的道路上,或多或少总有那么几个人说不行。

  • 你上学时,他说你学习不行;
  • 你工作了,他说你技术不行;
  • 你搞ES了,他说你水平不行;
  • 你写博客了,他说你是嘴炮;
  • 你负责产品了,他说你协调不行;
  • 你带团队了,他说你管理不行; ......

最好的办法,就是不理会外界的看法,做好自己认为对的东西、坚持自己的坚持!

但除了不理会,我更会以以下的方式激励自己:

1949年9月21日,伟大领袖毛主席在中国人民政治协商会议第一次全体会议上发表的开幕词中提到:

  • 让那些内外反动派在我们面前发抖吧!
  • 让他们去说我们这也不行那也不行吧!
  • 中国人民的不屈不挠的努力。
  • 必将稳步地达到自己的目的。

考取Elastic认证考试不为别的,就是为了证明自己

4、Elasticsearch认证考什么?

一图胜千言。

Elastic认证考试考纲.png

5、怎么准备Elastic认证考试?

5.1 站在巨人的肩上

先别着急上手,先做足提前工作,看看别人是如何通过的?

一定要有全球视野,国内通过经验分享,线上的有:wood大叔、魏彬老师(中国第一位)、阮一鸣老师、腾讯云慕容兄、XX快运的一技术大佬等。

线下的有杭州站的一次meetup分享、2019开发者大会的7位大佬的面对面交流分享。

国外的论坛、社区、博客等也有很多分享,要一并关注。

别人的宝贵的经验、教训能节省我们不少时间。

举例1:做足考试前的准备工作。

  • 考试的书桌或者办公桌要除了电脑、键盘、鼠标外没有任何其他物品。
  • 如果是笔记本电脑,不要有外接显示器。
  • 准备有包含和自己注册考试名字拼音一致的证件(护照或港澳通行证),身份证需要提前邮件申请报备才可以。
  • 提前检查摄像头确保好使,考试期间摄像头要全程打开、桌面要全程共享。 提前做足准备,避免考试的时候忙乱,影响考试节奏。

举例2:15分钟的检查环节,通过chat对话框进行,对方全是英文。

应试者是可以发中文的。 这是开发者大会听到的经验。我考试直接用上了,英文敲的毕竟有点费劲,对方不懂中文,但是有谷歌翻译,一样保证可以顺畅的沟通。 主要是节省宝贵的考试时间。

举例3:提前准备好VPN。

Snipaste_2020-02-07_13-38-47.png

网络不通,复习的再好也会有很大的挫败感。 我自己考试提前准备了vpn,但考到一半,vpn出故障,直接本地网络连接的,那个卡啊,苦的一逼,直接掉线5次+

5.2 熟悉考纲

明白不考什么、考什么很重要。

大家都知道:Elastic公司发展迅猛,早已由单个的Elasticsearch发展为ELK Stack。

包含但不限于:Elasticsearch、kibana、logstash、beats等。

但,Elasticsearch认证考试只考Elasticsearch,不考logstash、beats、kibana等。

kibana还得算个例外,基于xpack构建多用户、权限设置可以命令行实现,但通过kibana更快捷,考试可不可以直接kibana操作呢。

这个问题,我提前做了邮件咨询、回复如下:

Snipaste_2020-02-07_13-39-02.png

要熟悉到什么程度呢? 对着考纲,把要考的知识点分布的官方文档的位置,能O(1)时间找出来

5.3 刻意学习Elastic官方文档

单纯的看文档的确很枯燥、容易困,所以,要刻意练习。

如何刻意学习?

5.3.1 搭建有随手可得的集群环境。

  • 方式一:本机docker集群(三节点)。
  • 方式二:买云服务器。 我是买的云服务器,2核4GB,最多部署二个节点。足够,很多多节点任务,2节点演练也可以。

不建议:本地windows环境搭建集群。

原因:考试时centos7的环境。windows和linux毕竟不完全一致。

要模拟,就是近实战环境模拟。

5.3.2 平时遇到任何Elastic问题,先从文档找答案。

  • 1、考试环境是7.2版本,默认最新7.5+,需要切换下版本。 版本不一样,文档结构是不一样的。

  • 2、刻意熟悉文档。 注意:考试除了官方文档,不允许google等任何第三方文档的。

遇到问题,通过google、stackoverflow、elastic论坛找答案固然很快, 但,这样少了一次熟悉文档的机会。

  • 3、官方文档支持搜索,但万不得已,不建议用。

原因1:官方文档的搜索不好用。

原因2:熟悉文档结构后,直接锁定目标比搜索要快很多。

5.3.3 一定要动手敲

一定要动手敲!一定要动手敲!一定要动手敲! 重要的事情说三遍!

看一遍,不等于理解了。

理解了,不等于会实战了。

只有实战+理解了,考试才有信息和把握。

考试时kibana环境,平时:head插件、cerebro、postman都可以配置集群。

但,我们从平时就使用kibana dev-tool实现。

做到:平时如考试、考试如平时。

5.4 熟悉考试题型

不考:选择题、填空题、问答题、原理题。

全部都是英文实战题。

  • 题型一、实战部署题。

举例:冷热集群架构部署。

Snipaste_2020-02-07_13-39-11.png

  • 题型二、实战DSL题。

举例:满足给定条件的自定义模板、自定义查询、聚合、reindex+script等。

Snipaste_2020-02-07_13-39-19.png

6、Elastic认证经验、教训

6.1 备好vpn

血淋淋教训告诉你:如果条件允许,建议备两套美国线路的vpn。

我自己深有体会,网络不好,自己会着急,很无助但没有任何解决办法。

所以,工作要做在平时。

6.2 不打无准备之仗

按照考纲、考点刷文档、通过kibana实践。

考试试题中规中矩,没有很复杂的难题,但切记要做最充分的准备。

确保每个知识点自己kibana都敲过3遍以上。

部分点如:批量写入文档、查询、聚合、自定义Mapping常规操作,建议熟悉到不用翻文档,直接能敲出来。

6.3 盲点、疑点可能就是考点

不要有知识盲区,因为:任何你的知识盲区,都可能是考点

把工作做在平时,模棱两可的点,提前识别到,提前解决了,考试就剩下: 复制、黏贴、修改、提交过程了。

举例:上文提到的基于kibana配置用户角色。

举例:most_fields, best_fields, cross_fileld的核心区别?

6.4 考试常规技巧依然适用

  • 第一:进入考试环境后,先看一下有几个集群。

我考试时候是4个集群,1个四节点,其他3个单节点。

因为:集群环境是你后面所有操作的前置条件。

  • 第二:通读一遍考题。 目的1:是识别一下,哪些自己熟悉、哪些不熟悉。

建议:先易后难、先简后繁

目的2:知道哪些单节点环境,哪些多节点。

建议:先搞定单节点的,多节点集群的留到最后。

  • 第三:会多少,写多少。

我猜测考试会按点给分的,最后给出一个考试过的线(待核实)。

但,空着肯定是不行的。

7、Elastic认证常见问题

征集了一些大家最关心问题,梳理总结如下。

7.1 我英语太烂了,看不懂考题怎么办?

第一:英语四级就基本没问题能看懂题目,没有六级、考研的长难句,都是中规中矩试题,不复杂。

第二:平时看文档尝试关掉翻译。

第三:去年开发者大会,有个分享嘉宾说他考试时候开了谷歌翻译,也过了。

第三点没有求证,我建议可以发个邮件给考试组问一下,如果允许那就更好了,避免了理解歧义导致实战出错。

7.2 试错成本太高了,400美金肉疼,怎么办?

的确,真心肉疼。

提醒:多关注一下官方的活动。

  • 活动一:买一赠一活动。

也就是说:购买一次考试,赠送一次补考机会,补考1年内有效。

  • 活动二:75折扣活动。

去年下半年截至2020年1月31日有75折活动,能省100美金。

所以,做好充分准备争取一次过很重要。

7.3 认证考试有题库吗?

官方没有提供。

不过国内阮一鸣老师做了总结、国外一德国博士也做了总结。

我都做了一遍并梳理出答案。欢迎留言交流。

7.4 很难考吗?

有一定难度。体现在两个层面。

  • 第一:好多考点,平时我们不见得常用。

举例:自定义分析部分的同义词synonym filter、跨集群搜索、多机架分片均衡分配。

  • 第二:考试多少会设置一点点障碍。

我本次考试的4个集群全都没有启动,需要自己按条件部署后启动。

  • 第三:考试时间3个小时。

10-12道题,在熟悉文档的前提下,每个题目都需要争分夺秒、分秒必争。

7.5 考取认证有什么用?

第一:Elastic总部官方认可。

来自Elastic官方的认可,不容小觑。是对你实践能力的认可。

第二:含金量高

  • Elastic官方、社区大佬wood大叔、极客时间阮一鸣老师都强调过这个证书含金量很高。

  • 他不同于工信部的软考、PMP考试考的是理论能力、理解能力,全国每年几万人甚至十几万人都能通过,甚至在校大学生背背也能通过,

Elastic认证没有实践过几乎100%通不过的

第三:“升职加薪”。

  • 如果你考虑换工作,可以作为很好的敲门砖。
  • 如果你是面试官,应聘者通过认证,基础的Elastic实战问题说明已经非常熟练了,极大的提高你的招聘质量。
  • 如果你是职场人士或在校学生族,熟悉考点的过程也是你加强Elastic认知的过程。

最强大脑Dr魏在得到的课程中提到:"认知科学成果表明,提取记忆过程,特别是用考试作为手段的提取方式,不仅有学习的作用,甚至比简单的重复学习效果更好。”

7.6 一次通过的吗?

很遗憾,我也不是一次性通过的。

  • 2019年7月份考过一次,当时只简单过了一遍文档,很多地方没有实际敲过,考试一紧张,11道题只完成8道。 没过总结的原因无非两字:不熟。其他都是借口。

  • 2019年12月7日参加完Elastic开发者大会后,很有触动,又开始重新准备考试,侧重实战。

7.7 有没有可参考的复习计划?

2019年下半年,杭州的一次meetup分享很受用,我按照他的表格做了知识点的梳理和大致实践规划。

Snipaste_2020-02-07_13-39-31.png

大致分三个阶段。

  • 阶段1:熟悉官方文档。

官方文档+案例敲一遍,相关数据可以使用kibana提供的3种数据集。

这个时候遇到的任何问题自己解决不了,都可以抛出来中英文社区讨论,直到彻底懂了。

  • 阶段2:真题模拟,记录不熟的知识点。

我记录的一些核心点如下:

(1)parent/child

(2)nested

(3)script+ingest pipeline

(4)function_score

(5)dis_max, multi_fields(cross fields, most_fields, best_fields)

(6)security+role

(7)search template

(8)cross cluster search

(10)custom analyzer

(11)shard allocation

(12)cluster diagnose 

(13)backup restore

(14)hot-ware deployment

(15)mapping muti-fields

(16)settings+analyzer+

(17)update+search+reindex script

(18) template+alias
  • 阶段3:查缺补漏,重点突击。

基础已经基本熟悉了,对于第二阶段发现的问题,细节再过一遍文档,查缺补漏,确保万无一失。

  • 阶段4:迎战考试。

快速翻文档和1-3环节技术点,多过几遍。能o(1)时间找到文档位置。

以上三个过程,全环节都需要实战演练。

1-3阶段可以放慢速度,求稳、求准。

第4阶段适度进展,迎战考试,确保没有遗漏,确保能最快时间定位文档。

7.8 这次考了哪些题?

1、terms聚合分析

2、跨集群检索

3、4节点跨集群分片副本感知分配

5、用户角色、用户名密码指定

6、动态模板template

7、reindex+ingest pipeline

8、检索+提升评分权重

9、自定义mapping+multi-fields

10、检索+排序+高亮+等

这次考试好几个题目的题干都很长

7.9 你考试花了多长时间?

  • 2019年12月8日重新定下目标考试,2020年2月3日参加考试。
  • 期间只有晚上10点到12点左右有时间。临考前2天准备了2个整天。
  • 中间有别的事情+春节,断过几天。

7.10 平时工作那么忙、哪有时间考试?

  • 的确,这是大家通病。年底都忙,过年也忙。
  • 自己挤时间,我为了准备考试,12月8日——2月5日,朋友圈彻底关闭、一切新闻客户端彻底删除。不狠一把,你都不知道自己有多厉害!
  • 期间也有想放弃的时候,就听一下俞敏洪一分钟励志演讲,管用!新东方的励志语录也萦绕在耳边“坚持下去不是因为我很坚强,而是我别无选择”。
  • 特殊期间,正是提升内功的绝佳时机。看别的只会让你焦虑和恐慌,做好自己就是对国家的贡献。
  • 如果你平时工作中就一直使用Elasticsearch,可以平时的时候刻意注意熟悉实践文档。我看腾讯大佬们的分享都很轻松,不用我写的这么“悲壮”。

8、考过了就牛逼了吗?

大错特错,考试说白了只能证明你文档熟+实践能力强。 并不能说明你底层原理熟悉+源码熟悉,离大佬还差十万八千里。 真正的大佬是:

  • 以medcl等大佬为代表的Elastic原厂技术团队;
  • 以wood大佬+阮一鸣等大佬为代表的大厂企业级实战派;
  • 以魏彬等大佬为代表的咨询专家团队;
  • 以张超等大佬为代表的源码原理派。

多向他们学习和求经,能获益良多。

9、小结

著名相声表演艺术家常宝华曾这样评价侯宝林大师:“在他面前,我就像不会(说相声)似的”。

我认为这句话对技术人员一样受用。技术的道路上,我们要谨记这句话。

  • 一方面:新技术层出不穷,不要抱残守缺,要拥抱变化。同时注意底层原理大多是相通的,要深挖,不要浮于表面

  • 另一方面:保持对技术的敬畏和好奇之心,热爱自己的热爱、坚持自己的坚持。

专研技术的同时要多向身边或者网上的牛人学习。一个人可能走得更快,但一群人走得更远

文章标题的来源自偶像俞敏洪老师公众号对粉丝的回复:

和大家共勉!

潜心一技、做到极致。

和你一起,死磕Elastic!

收起阅读 »

ES 6.4.3 X-PACK 启用安装配置

由于 ES开源了X-PACK代码,现在6.4.3版本与6.3以及以下的有变化
我基于最新的版本整理了下启用X-PACK功能。坑比较多,给我的感觉与searchguard 搞得越来越像了……
比较坑的是 transport(9300) 必须要用SSL…… 大家注意下。 6比5复杂多了……
 
Configure each node to:
Required: Enable TLS on the transport layer.
Recommended: Enable TLS on the HTTP layer.

 
参考:
https://www.elastic.co/guide/e ... .html
  1. ES 设置
  2. 配置 TLS/SSL
  3. 配置ES(x-pack认证)
  4. 启动ES
  5. 配置密码
  6. 配置kibana

 1 Elasticsearch.yml 文件添加内容
xpack.security.enabled: true
2 .1生成CA证书
./elasticsearch-certutil ca
2.2 生成客户端证书
./elasticsearch-certutil cert --ca
2.3ES启用SSL配置文件
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: xxx.p12
xpack.security.transport.ssl.truststore.path: xxx.p12
2.4 keystore 添加内容
./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
3启用相关功能


xpack.monitoring.enabled: true
xpack.graph.enabled: true
xpack.ml.enabled: true
xpack.security.enabled: true
xpack.watcher.enabled: true
xpack.security.authc.accept_default_password: false
xpack.security.transport.ssl.enabled: true
xpack.monitoring.collection.cluster.stats.timeout: 30m
xpack.monitoring.collection.index.stats.timeout: 30m
xpack.monitoring.collection.index.recovery.active_only: true
xpack.monitoring.collection.index.recovery.timeout: 30m
xpack.monitoring.history.duration: 3650d


4 启动ES
./elasticsearch -d 每台
5配置密码
./elasticsearch-setup-passwords
 6汉化kibana 这玩意我还没有整理完,5差不多搞完了。
7开始浪

6版本
无标题1.png

5版本

无标题4.png


无标题2.png


无标题3.png
继续阅读 »
由于 ES开源了X-PACK代码,现在6.4.3版本与6.3以及以下的有变化
我基于最新的版本整理了下启用X-PACK功能。坑比较多,给我的感觉与searchguard 搞得越来越像了……
比较坑的是 transport(9300) 必须要用SSL…… 大家注意下。 6比5复杂多了……
 
Configure each node to:
Required: Enable TLS on the transport layer.
Recommended: Enable TLS on the HTTP layer.

 
参考:
https://www.elastic.co/guide/e ... .html
  1. ES 设置
  2. 配置 TLS/SSL
  3. 配置ES(x-pack认证)
  4. 启动ES
  5. 配置密码
  6. 配置kibana

 1 Elasticsearch.yml 文件添加内容
xpack.security.enabled: true
2 .1生成CA证书
./elasticsearch-certutil ca
2.2 生成客户端证书
./elasticsearch-certutil cert --ca
2.3ES启用SSL配置文件
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: xxx.p12
xpack.security.transport.ssl.truststore.path: xxx.p12
2.4 keystore 添加内容
./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
3启用相关功能


xpack.monitoring.enabled: true
xpack.graph.enabled: true
xpack.ml.enabled: true
xpack.security.enabled: true
xpack.watcher.enabled: true
xpack.security.authc.accept_default_password: false
xpack.security.transport.ssl.enabled: true
xpack.monitoring.collection.cluster.stats.timeout: 30m
xpack.monitoring.collection.index.stats.timeout: 30m
xpack.monitoring.collection.index.recovery.active_only: true
xpack.monitoring.collection.index.recovery.timeout: 30m
xpack.monitoring.history.duration: 3650d


4 启动ES
./elasticsearch -d 每台
5配置密码
./elasticsearch-setup-passwords
 6汉化kibana 这玩意我还没有整理完,5差不多搞完了。
7开始浪

6版本
无标题1.png

5版本

无标题4.png


无标题2.png


无标题3.png
收起阅读 »

Elasticsearch 移除 type 之后的新姿势

随着 7.0 版本的即将发布,type 的移除也是越来越近了,在 6.0 的时候,已经默认只能支持一个索引一个 type 了,7.0 版本新增了一个参数 include_type_name ,即让所有的 API 是 type 相关的,这个参数在 7.0 默认是 true,不过在 8.0 的时候,会默认改成 false,也就是不包含 type 信息了,这个是 type 用于移除的一个开关。

让我们看看最新的使用姿势吧,当 include_type_name 参数设置成 false 后:

  • 索引操作:PUT {index}/{type}/{id}需要修改成PUT {index}/_doc/{id}
  • Mapping 操作:PUT {index}/{type}/_mapping 则变成 PUT {index}/_mapping
  • 所有增删改查搜索操作返回结果里面的关键字 _type 都将被移除
  • 父子关系使用 join 字段来构建
#创建索引
PUT twitter
{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { "type": "keyword" }, 
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" },
        "content": { "type": "text" },
        "tweeted_at": { "type": "date" }
      }
    }
  }
}

#修改索引
PUT twitter/_doc/user-kimchy
{
  "type": "user", 
  "name": "Shay Banon",
  "user_name": "kimchy",
  "email": "shay@kimchy.com"
}

#搜索
GET twitter/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "user_name": "kimchy"
        }
      },
      "filter": {
        "match": {
          "type": "tweet" 
        }
      }
    }
  }
}

#重建索引
POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}

相关链接:

继续阅读 »

随着 7.0 版本的即将发布,type 的移除也是越来越近了,在 6.0 的时候,已经默认只能支持一个索引一个 type 了,7.0 版本新增了一个参数 include_type_name ,即让所有的 API 是 type 相关的,这个参数在 7.0 默认是 true,不过在 8.0 的时候,会默认改成 false,也就是不包含 type 信息了,这个是 type 用于移除的一个开关。

让我们看看最新的使用姿势吧,当 include_type_name 参数设置成 false 后:

  • 索引操作:PUT {index}/{type}/{id}需要修改成PUT {index}/_doc/{id}
  • Mapping 操作:PUT {index}/{type}/_mapping 则变成 PUT {index}/_mapping
  • 所有增删改查搜索操作返回结果里面的关键字 _type 都将被移除
  • 父子关系使用 join 字段来构建
#创建索引
PUT twitter
{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { "type": "keyword" }, 
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" },
        "content": { "type": "text" },
        "tweeted_at": { "type": "date" }
      }
    }
  }
}

#修改索引
PUT twitter/_doc/user-kimchy
{
  "type": "user", 
  "name": "Shay Banon",
  "user_name": "kimchy",
  "email": "shay@kimchy.com"
}

#搜索
GET twitter/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "user_name": "kimchy"
        }
      },
      "filter": {
        "match": {
          "type": "tweet" 
        }
      }
    }
  }
}

#重建索引
POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}

相关链接:

收起阅读 »

Docker 社区版中 Kubernetes 开启

Docker 社区版从 17.12 版本开始已经提供了对 Kubernetes 的支持。但是由于其安装过程依赖的镜像服务在国内访问很不稳定,很多朋友都无法配置成功。阿里提供了一个简单的工具帮助大家开启 Docker 社区版的Kubernetes 功能

开启 Kubernetes 从 Docker 官方站点下载并安装 Docker for Mac 或 Docker for Windows

在 Docker -> Preferences ... 中,配置 registry mirror 为 https://registry.docker-cn.com

具体步骤参考: https://github.com/wellpeng/k8s-for-docker-desktop
 
继续阅读 »
Docker 社区版从 17.12 版本开始已经提供了对 Kubernetes 的支持。但是由于其安装过程依赖的镜像服务在国内访问很不稳定,很多朋友都无法配置成功。阿里提供了一个简单的工具帮助大家开启 Docker 社区版的Kubernetes 功能

开启 Kubernetes 从 Docker 官方站点下载并安装 Docker for Mac 或 Docker for Windows

在 Docker -> Preferences ... 中,配置 registry mirror 为 https://registry.docker-cn.com

具体步骤参考: https://github.com/wellpeng/k8s-for-docker-desktop
  收起阅读 »

Elastic 中文社区运维监控实战 (2) - 总体方案

接上一篇:Elastic 中文社区运维监控实战 (1) - 序

本文为系列文章第二篇,主要介绍如何把 Elastic 中文社区的网站服务器监控起来,对有同样想了解如何使用 Elastic Stack 来做运维监控的同学,可以作为一个很好的参考和入门资料,学习门槛定义为入门级。

本节内容

在深入到具体的监控指标收集的细节之前,今天先主要介绍一下 Elastic 中文社区的总体方案。这样我们在动手之前会有一个总体的思路和对所用工具有一个大致的了解。

技术选型

工欲善其事必先利其器

前面已经提到我们要对服务器进行各项性能指标的监控以及日志的监控。

看起来很复杂,因为有很多信息需要收集。 好在我们有 Elastic Stack,使用它们来作为我们的监控工具,整个工作就变得简单了,我们结合我们社区监控的这个场景,具体来看的话,需要的工具主要是如下几个:

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。简单易用,用户众多,性能优良,久经考验,支持单节点部署到虚拟机,并可随着业务增长无缝伸缩扩容至上千个节点规模的集群,PB 级别数据也不在话下。

日志数据和指标监控数据都能放,通过集中式存储所有的这些时序型数据,可以快速方便的对这些数据进行分析和关联,实在是排障运维和性能调优的不二选择,你如果还不知道 Elasticsearch,那我只能说你真的是 out 了。

Elastic Beats 家族的一员,Go 语言编写,轻量级,无依赖,这样就可以很方便的完成收集端的部署,所以如果你的场景和我一样, 可以优先使用 Filebeat 代替 Logstash 来收集日志,当然如果有日志的进一步加工,可以让 Filebeat 把数据发送给 Logstash,然后 Logstash 处理完之后再发送给 Elasticsearch。

Filebeat 使用很灵活,可以指定你的日志路径来进行收集,还可以对数据进行预过滤,对于一些常见的监控需求,Filebeat 以模块的方式替你打包好了一切,如:日志路径配置、解析规则、机器学习的任务,甚至还自带 Dashboard,简单几个操作,就可以完成从数据收集到最终可视化分析的所有工作。

我们这次需要监控的服务器都是一些常规的指标,而 Metricbeat 刚好都支持这些指标的收集,你说这不巧了不是。

Metricbeat 同样也是 Elastic Beats 家族的一员,同样也是开源的。定位是一个轻量级的监控指标采集器,采用 Go 语言编写,同样提供的是一个很小的无依赖的二进制文件包,能够收集服务器(Linux、Windows、Mac)本身的运行指标,如: CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据等,还能获取服务器上面的各项服务的运行指标,常见的如: Apache、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus、Redis 等都有直接支持,并且内置了 Elasticsearch 索引和 mapping 设置,以及 Ingest pipeline 设置,还提前预置了不少 Kibana 的 Dashboard,开箱即用、即分析。

和 Elasticsearch 工作的最佳拍档,结合 Elasticsearch 的实时分析能力,可以非常方便的对各种数据进行搜索和分析,你可以灵活的自定义的各种图形展现和 Dashboard,不用编写一行代码,即可进行数据分析,除了分析,还整合了 Elastic Stack 的各个产品的管理功能,作为 Elastic Stack 的图形交互终端。

除了上面这些工具,后续我们还可以考虑使用 Auditbeat 来收集服务器的安全行为日志,使用 Heartbeat 来监控各个服务的端口是否正常,我们先完成基本的监控之后,再慢慢将这些加上。

可以看到,我们没有用到 Logstash,是的,这个规模的监控,可以不考虑 Logstash,这样我们可以做到架构简单和足够的轻量级。

上面列的这些软件都是 Elastic 家族的产品,并且都是开源的,所有的源码都在:https://github.com/elastic/

部署方案

在收集数据之前,我们需要明确我们数据放在哪里,毫无疑问,所有的数据都将放在 Elasticsearch 里面,不过 Elasticsearch 不能部署在 Elastic 中文社区的这台服务器上面,一个是资源的限制,另外一个是基于安全的考虑,如果 Elastic 社区的服务器挂了,数据不光收不到,连什么时候挂的都不知道。所以我们需要把 Elasticsearch 服务搭建在别的地方,有多种选择:

  • 使用 Elastic Cloud,很方便就能开通,缺点国内访问速度慢,暂时还没开放机器学习的功能。
  • 使用阿里云的 Elasticsearch,Elastic 官方合作伙伴,国内唯一包含 X-Pack 的完整功能的 Elasticsearch 云服务,国内访问速度快。
  • 自己搭建的 Elasticsearch 集群。

使用阿里云的 Elasticsearch 无疑很方便,不过我家里刚好有一台服务器,型号 HP Gen8,16GB 内存,上面运行了 SmartOS,跑几个 zone 很轻松,每天用来备份社区的数据库,再来起一个 Elasticsearch 服务也很方便,通过路由器将内网 IP 映射出去,让社区服务器将监控数据发送到这台服务器上面来,安全上面,需要保证这台服务器不被黑客攻击,需要做一些必要的访问控制,可以使用 X-Pack 的身份验证,结合 IP 白名单功能,只允许内网和 Elastic 中文社区服务器的 IP 访问。

我们将之命名为:Ops Center,方便后面招呼。

可以看到,Elastic 社区服务器除了启动 Filebeat 和 Metricbeat 之外,不需要额外做什么服务器本身的设置。

这里画一个简单的部署拓扑图,方便理解:

deploy2.png

今天主要写到这里,后面将具体介绍它们的安装部署过程。

继续阅读 »

接上一篇:Elastic 中文社区运维监控实战 (1) - 序

本文为系列文章第二篇,主要介绍如何把 Elastic 中文社区的网站服务器监控起来,对有同样想了解如何使用 Elastic Stack 来做运维监控的同学,可以作为一个很好的参考和入门资料,学习门槛定义为入门级。

本节内容

在深入到具体的监控指标收集的细节之前,今天先主要介绍一下 Elastic 中文社区的总体方案。这样我们在动手之前会有一个总体的思路和对所用工具有一个大致的了解。

技术选型

工欲善其事必先利其器

前面已经提到我们要对服务器进行各项性能指标的监控以及日志的监控。

看起来很复杂,因为有很多信息需要收集。 好在我们有 Elastic Stack,使用它们来作为我们的监控工具,整个工作就变得简单了,我们结合我们社区监控的这个场景,具体来看的话,需要的工具主要是如下几个:

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。简单易用,用户众多,性能优良,久经考验,支持单节点部署到虚拟机,并可随着业务增长无缝伸缩扩容至上千个节点规模的集群,PB 级别数据也不在话下。

日志数据和指标监控数据都能放,通过集中式存储所有的这些时序型数据,可以快速方便的对这些数据进行分析和关联,实在是排障运维和性能调优的不二选择,你如果还不知道 Elasticsearch,那我只能说你真的是 out 了。

Elastic Beats 家族的一员,Go 语言编写,轻量级,无依赖,这样就可以很方便的完成收集端的部署,所以如果你的场景和我一样, 可以优先使用 Filebeat 代替 Logstash 来收集日志,当然如果有日志的进一步加工,可以让 Filebeat 把数据发送给 Logstash,然后 Logstash 处理完之后再发送给 Elasticsearch。

Filebeat 使用很灵活,可以指定你的日志路径来进行收集,还可以对数据进行预过滤,对于一些常见的监控需求,Filebeat 以模块的方式替你打包好了一切,如:日志路径配置、解析规则、机器学习的任务,甚至还自带 Dashboard,简单几个操作,就可以完成从数据收集到最终可视化分析的所有工作。

我们这次需要监控的服务器都是一些常规的指标,而 Metricbeat 刚好都支持这些指标的收集,你说这不巧了不是。

Metricbeat 同样也是 Elastic Beats 家族的一员,同样也是开源的。定位是一个轻量级的监控指标采集器,采用 Go 语言编写,同样提供的是一个很小的无依赖的二进制文件包,能够收集服务器(Linux、Windows、Mac)本身的运行指标,如: CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据等,还能获取服务器上面的各项服务的运行指标,常见的如: Apache、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus、Redis 等都有直接支持,并且内置了 Elasticsearch 索引和 mapping 设置,以及 Ingest pipeline 设置,还提前预置了不少 Kibana 的 Dashboard,开箱即用、即分析。

和 Elasticsearch 工作的最佳拍档,结合 Elasticsearch 的实时分析能力,可以非常方便的对各种数据进行搜索和分析,你可以灵活的自定义的各种图形展现和 Dashboard,不用编写一行代码,即可进行数据分析,除了分析,还整合了 Elastic Stack 的各个产品的管理功能,作为 Elastic Stack 的图形交互终端。

除了上面这些工具,后续我们还可以考虑使用 Auditbeat 来收集服务器的安全行为日志,使用 Heartbeat 来监控各个服务的端口是否正常,我们先完成基本的监控之后,再慢慢将这些加上。

可以看到,我们没有用到 Logstash,是的,这个规模的监控,可以不考虑 Logstash,这样我们可以做到架构简单和足够的轻量级。

上面列的这些软件都是 Elastic 家族的产品,并且都是开源的,所有的源码都在:https://github.com/elastic/

部署方案

在收集数据之前,我们需要明确我们数据放在哪里,毫无疑问,所有的数据都将放在 Elasticsearch 里面,不过 Elasticsearch 不能部署在 Elastic 中文社区的这台服务器上面,一个是资源的限制,另外一个是基于安全的考虑,如果 Elastic 社区的服务器挂了,数据不光收不到,连什么时候挂的都不知道。所以我们需要把 Elasticsearch 服务搭建在别的地方,有多种选择:

  • 使用 Elastic Cloud,很方便就能开通,缺点国内访问速度慢,暂时还没开放机器学习的功能。
  • 使用阿里云的 Elasticsearch,Elastic 官方合作伙伴,国内唯一包含 X-Pack 的完整功能的 Elasticsearch 云服务,国内访问速度快。
  • 自己搭建的 Elasticsearch 集群。

使用阿里云的 Elasticsearch 无疑很方便,不过我家里刚好有一台服务器,型号 HP Gen8,16GB 内存,上面运行了 SmartOS,跑几个 zone 很轻松,每天用来备份社区的数据库,再来起一个 Elasticsearch 服务也很方便,通过路由器将内网 IP 映射出去,让社区服务器将监控数据发送到这台服务器上面来,安全上面,需要保证这台服务器不被黑客攻击,需要做一些必要的访问控制,可以使用 X-Pack 的身份验证,结合 IP 白名单功能,只允许内网和 Elastic 中文社区服务器的 IP 访问。

我们将之命名为:Ops Center,方便后面招呼。

可以看到,Elastic 社区服务器除了启动 Filebeat 和 Metricbeat 之外,不需要额外做什么服务器本身的设置。

这里画一个简单的部署拓扑图,方便理解:

deploy2.png

今天主要写到这里,后面将具体介绍它们的安装部署过程。

收起阅读 »

Elastic 中文社区运维监控实战 (1) - 序

本文为系列文章第一篇,主要介绍如何把 Elastic 中文社区的网站服务器监控起来,对有同样想了解如何使用 Elastic Stack 来做运维监控的同学,可以作为一个很好的参考和入门资料,学习门槛定义为入门级。

首先,我们要监控的网站,也就是大家现在正在访问的 Elastic 官方中文社区,网址:elasticsearch.cn,这个网站基于开源的 WeCenter 搭建,开发语言是 PHP,后端数据库是 MySQL,目前只有一台服务器,由 ConvertLab 友情无偿赞助,大写的赞!再次感谢!

服务器部署环境是 Ubuntu 16.04.2,部署了以下服务及软件:

  • Nginx - Http 反向代理,不要介绍了吧
  • PHP-FPM - 一个常用的 PHP FastCGI 管理
  • Elasticsearch - Elasticsearch 服务,用于社区的垂直搜索服务 Elastic 情报局 服务
  • GOPA - 可以说是为社区而写的,一个轻量级的爬虫,用于爬取 Elatic 周边相关相关资料,创建索引存放到 Elasticsearch 里面,提供垂直搜索服务,代码地址
  • Grok Debugger - 一个 Java 的 Grok pattern 调试服务,方便大家调试 Grok 日志解析规则,访问地址:grok.elasticsearch.cn

服务器上所有的财产就这些了,一个平淡无奇的网站,基本上所有的东西都能公开访问到,这个网站的目的就是为所有 Elastic 爱好者服务的,供大家交流和沟通的专属平台,所以请各位黑客大侠不要再扫描和攻击啦,画一个简单的拓扑图如下所示:

topology.png

作为一个合格的网管,除了重启服务器之外,还必须要保证网站的正常运行,所以了解网站的运行情况就变成了一个需要解决的首要问题,我们可以先把任务具体列一下:

  • 网站是否正常访问,各项服务有没有挂
  • 网站访问情况如何,用户访问速度如何
  • 网站访客统计分析,访客相关数据分析
  • 服务器的各项指标,详细指标监控分析
  • 服务器的各项服务,日志集中分析处理
  • 服务器是否很安全,有没有黑客来造访
  • 数据是否安全备份,有没有定期测试过

实在编不下去了(话说对的还蛮齐),说人话就是监控起服务器的各项指标和收集服务的日志,然后出几个分析的 Dashboard,监控报警整起来。

我们这次需要用到的工具主要就是 Elastic Stack 啦,Elastic Stack 包括 Elasticsearch、Logstash、Beats 和 Kibana,版本都用最新的 6.x,再结合我们实际的数据和实际的需求,在后面的文章里面,我会具体介绍它们是什么以及如何使用。

今天先写到这里,明天写监控指标的收集,此系列文章暂且定为需要 100 期完成。(开个玩笑,哈哈)。

继续阅读 »

本文为系列文章第一篇,主要介绍如何把 Elastic 中文社区的网站服务器监控起来,对有同样想了解如何使用 Elastic Stack 来做运维监控的同学,可以作为一个很好的参考和入门资料,学习门槛定义为入门级。

首先,我们要监控的网站,也就是大家现在正在访问的 Elastic 官方中文社区,网址:elasticsearch.cn,这个网站基于开源的 WeCenter 搭建,开发语言是 PHP,后端数据库是 MySQL,目前只有一台服务器,由 ConvertLab 友情无偿赞助,大写的赞!再次感谢!

服务器部署环境是 Ubuntu 16.04.2,部署了以下服务及软件:

  • Nginx - Http 反向代理,不要介绍了吧
  • PHP-FPM - 一个常用的 PHP FastCGI 管理
  • Elasticsearch - Elasticsearch 服务,用于社区的垂直搜索服务 Elastic 情报局 服务
  • GOPA - 可以说是为社区而写的,一个轻量级的爬虫,用于爬取 Elatic 周边相关相关资料,创建索引存放到 Elasticsearch 里面,提供垂直搜索服务,代码地址
  • Grok Debugger - 一个 Java 的 Grok pattern 调试服务,方便大家调试 Grok 日志解析规则,访问地址:grok.elasticsearch.cn

服务器上所有的财产就这些了,一个平淡无奇的网站,基本上所有的东西都能公开访问到,这个网站的目的就是为所有 Elastic 爱好者服务的,供大家交流和沟通的专属平台,所以请各位黑客大侠不要再扫描和攻击啦,画一个简单的拓扑图如下所示:

topology.png

作为一个合格的网管,除了重启服务器之外,还必须要保证网站的正常运行,所以了解网站的运行情况就变成了一个需要解决的首要问题,我们可以先把任务具体列一下:

  • 网站是否正常访问,各项服务有没有挂
  • 网站访问情况如何,用户访问速度如何
  • 网站访客统计分析,访客相关数据分析
  • 服务器的各项指标,详细指标监控分析
  • 服务器的各项服务,日志集中分析处理
  • 服务器是否很安全,有没有黑客来造访
  • 数据是否安全备份,有没有定期测试过

实在编不下去了(话说对的还蛮齐),说人话就是监控起服务器的各项指标和收集服务的日志,然后出几个分析的 Dashboard,监控报警整起来。

我们这次需要用到的工具主要就是 Elastic Stack 啦,Elastic Stack 包括 Elasticsearch、Logstash、Beats 和 Kibana,版本都用最新的 6.x,再结合我们实际的数据和实际的需求,在后面的文章里面,我会具体介绍它们是什么以及如何使用。

今天先写到这里,明天写监控指标的收集,此系列文章暂且定为需要 100 期完成。(开个玩笑,哈哈)。

收起阅读 »

ELK学习资料整理

刚开始学习使用ELK,整理一个学习资料列表,当做备忘录。
 
1.第一个当然是官方文档
  • ElasticSearch参考手册,学习 DSL查询语法,包括查找(query)、过滤(filter)和聚合(aggs)等。
  • Logstash参考手册,学习数据导入,包括输入(input)、过滤(filter)和输出( output)等,主要是filter中如何对复杂文本 进行拆分和类型 转化。
  • Kibana参考手册,使用Kibana提供的前端界面对数据进行快速展示,主要是对Visulize 模块的使

2.中文文档

 
欢迎补充……
继续阅读 »
刚开始学习使用ELK,整理一个学习资料列表,当做备忘录。
 
1.第一个当然是官方文档
  • ElasticSearch参考手册,学习 DSL查询语法,包括查找(query)、过滤(filter)和聚合(aggs)等。
  • Logstash参考手册,学习数据导入,包括输入(input)、过滤(filter)和输出( output)等,主要是filter中如何对复杂文本 进行拆分和类型 转化。
  • Kibana参考手册,使用Kibana提供的前端界面对数据进行快速展示,主要是对Visulize 模块的使

2.中文文档

 
欢迎补充…… 收起阅读 »

ES中文社区logo



我试试怎么用


我试试怎么用