使用 shuf 来打乱一个文件中的行或是选择文件中一个随机的行。

将ES索引从一个集群迁移到另一个集群的python脚本

将索引从一个集群(ip:192.168.0.1)迁移到另一个集群(ip:192.168.0.2),新集群需要配置白名单:

# elasticsearch.yml
reindex.remote.whitelist: ['192.168.0.1:9200']
import json

import requests

import base64

# 迁移索引数据
def reindex(index):
    print("{0} 索引正在迁移中".format(index))
    jsonData = {
        "source": {
            "remote": {
                "host": "http://192.168.0.1:9200",
                "socket_timeout": "30s",
                "connect_timeout": "30s",
                "username": "elastic",
                "password": "123456"
            },
            "index": index
        },
        "dest": {
            "index": index
        }
    }
    res = requests.post("http://192.168.0.2:9200/_reindex", json=jsonData)
    print(res.status_code)
    print(res.content)

# 获取创建索引的语句
def getIndexDslJson(index):

    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }

    res = requests.get("http://192.168.0.1:9200/{0}".format(index),
                       headers=headers)
    print(res.status_code)
    jsonIndex = json.loads(res.content)
    print(jsonIndex[index])
    del jsonIndex[index]['settings']['index']['creation_date']
    del jsonIndex[index]['settings']['index']['provided_name']
    del jsonIndex[index]['settings']['index']['uuid']
    del jsonIndex[index]['settings']['index']['version']
    jsonIndex[index]['settings']['index']['number_of_shards'] = 1
    jsonIndex[index]['settings']['index']['number_of_replicas'] = 0
    return jsonIndex[index]

# 创建索引
def createIndex(index, dslJson):
    res = requests.put("http://192.168.0.2:9200/{0}".format(index), json=dslJson)
    print(res.status_code)
    print(res.content)

if __name__ == '__main__':
    # 需要创建的索引
    indexList = [
        "index1_v1", "index2_v1"
    ]
    for index in indexList:
        dslJson = getIndexDslJson(index) # 获取原索引的结构
        createIndex(index, dslJson) # 根据原索引结构,在新集群创建索引
        reindex(index) # 将原集群索引迁移到新集群
继续阅读 »

将索引从一个集群(ip:192.168.0.1)迁移到另一个集群(ip:192.168.0.2),新集群需要配置白名单:

# elasticsearch.yml
reindex.remote.whitelist: ['192.168.0.1:9200']
import json

import requests

import base64

# 迁移索引数据
def reindex(index):
    print("{0} 索引正在迁移中".format(index))
    jsonData = {
        "source": {
            "remote": {
                "host": "http://192.168.0.1:9200",
                "socket_timeout": "30s",
                "connect_timeout": "30s",
                "username": "elastic",
                "password": "123456"
            },
            "index": index
        },
        "dest": {
            "index": index
        }
    }
    res = requests.post("http://192.168.0.2:9200/_reindex", json=jsonData)
    print(res.status_code)
    print(res.content)

# 获取创建索引的语句
def getIndexDslJson(index):

    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }

    res = requests.get("http://192.168.0.1:9200/{0}".format(index),
                       headers=headers)
    print(res.status_code)
    jsonIndex = json.loads(res.content)
    print(jsonIndex[index])
    del jsonIndex[index]['settings']['index']['creation_date']
    del jsonIndex[index]['settings']['index']['provided_name']
    del jsonIndex[index]['settings']['index']['uuid']
    del jsonIndex[index]['settings']['index']['version']
    jsonIndex[index]['settings']['index']['number_of_shards'] = 1
    jsonIndex[index]['settings']['index']['number_of_replicas'] = 0
    return jsonIndex[index]

# 创建索引
def createIndex(index, dslJson):
    res = requests.put("http://192.168.0.2:9200/{0}".format(index), json=dslJson)
    print(res.status_code)
    print(res.content)

if __name__ == '__main__':
    # 需要创建的索引
    indexList = [
        "index1_v1", "index2_v1"
    ]
    for index in indexList:
        dslJson = getIndexDslJson(index) # 获取原索引的结构
        createIndex(index, dslJson) # 根据原索引结构,在新集群创建索引
        reindex(index) # 将原集群索引迁移到新集群
收起阅读 »

使用docker安装es环境

创建es账号并授权

# 创建账号
adduser es

# 修改密码
passwd es   

# 授权
chmod -v u+w /etc/sudoers
vim /etc/sudoers

#新增
es ALL=(ALL) ALL

# wq保存退出,这时候要记得将写权限收回
chmod -v u-w /etc/sudoers

创建docker网络

docker network create tx

安装Elasticsearch

docker pull elasticsearch:6.7.1
在/home/es 中创建 config,data,plugins目录
在plugins目录中下载es相关插件,如:ik,pinyin等
在config中创建elasticsearch.yml配置,创建analysis\synonym.txt 同义词
给data配置权限 sudo chmod 777 /home/es/data/
将/home/es 目录及其子目录的用户改为es:chown -R es:root /home/es/
# elasticsearch.yml
cluster.name: "my-docker-cluster"
node.name: "es-node1"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
node.master: true
reindex.remote.whitelist: ['other:9200']

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate 
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
docker run -d --net tx --name my_elasticsearch -p 9201:9200 -p 9301:9300 -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es/config/analysis:/usr/share/elasticsearch/config/analysis -v /home/es/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" -i -t --privileged=true elasticsearch:6.7.1

安装kibana

docker pull kibana:6.7.1
# kibana.yml配置文件
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["http://my_elasticsearch:9200"]
i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
xpack.graph.enabled : true
xpack.ml.enabled : true
xpack.monitoring.enabled : true
xpack.reporting.enabled : true
xpack.security.enabled : true
xpack.watcher.enabled : true
docker run -d --name kibana --net tx -p 5601:5601 -v  /home/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:6.7.1
继续阅读 »

创建es账号并授权

# 创建账号
adduser es

# 修改密码
passwd es   

# 授权
chmod -v u+w /etc/sudoers
vim /etc/sudoers

#新增
es ALL=(ALL) ALL

# wq保存退出,这时候要记得将写权限收回
chmod -v u-w /etc/sudoers

创建docker网络

docker network create tx

安装Elasticsearch

docker pull elasticsearch:6.7.1
在/home/es 中创建 config,data,plugins目录
在plugins目录中下载es相关插件,如:ik,pinyin等
在config中创建elasticsearch.yml配置,创建analysis\synonym.txt 同义词
给data配置权限 sudo chmod 777 /home/es/data/
将/home/es 目录及其子目录的用户改为es:chown -R es:root /home/es/
# elasticsearch.yml
cluster.name: "my-docker-cluster"
node.name: "es-node1"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
node.master: true
reindex.remote.whitelist: ['other:9200']

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate 
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
docker run -d --net tx --name my_elasticsearch -p 9201:9200 -p 9301:9300 -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es/config/analysis:/usr/share/elasticsearch/config/analysis -v /home/es/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" -i -t --privileged=true elasticsearch:6.7.1

安装kibana

docker pull kibana:6.7.1
# kibana.yml配置文件
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["http://my_elasticsearch:9200"]
i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
xpack.graph.enabled : true
xpack.ml.enabled : true
xpack.monitoring.enabled : true
xpack.reporting.enabled : true
xpack.security.enabled : true
xpack.watcher.enabled : true
docker run -d --name kibana --net tx -p 5601:5601 -v  /home/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:6.7.1
收起阅读 »

Kibana 中用公式和时间旅行回答的 10 个常见问题

Kibana 创建了简单的方法来有效地处理你的所有数据 — 提出和回答问题并跟踪分析流程。 很多时候,你的问题的答案需要根据查询数据进行计算。 公式允许你通过使用数学运算组合多个聚合字段来创作自己的指标。

此外,在时间和空间中移动和重放数据是获取历史背景和了解关于现在的更多见解的有效方法。

在以下部分中,你将找到 10 个问题示例,你可以通过公式、时移和及时浏览数据,使用 Kibana 中的仪表板数据和地图可视化来回答这些问题。 尝试跟随你自己的数据或使用 Kibana 的示例数据集。 有问题吗? 前往我们的讨论论坛。

在名单上:

错误的比例在增加吗?
表现与上周相比如何?
这些数据与同行相比如何?
对我的平均水平影响最大的是什么?
与历史相比,原始收益/损失是多少?
收益/损失占过去业绩的百分比是多少?
数据是如何到达现在的位置的?
如何以交互方式探索空间中的仪表板?
这个指标的单位版本是什么?
我对上一时期的行业特定计算(例如“净推荐值”)是什么?
 
https://elasticstack.blog.csdn ... 83729
继续阅读 »
Kibana 创建了简单的方法来有效地处理你的所有数据 — 提出和回答问题并跟踪分析流程。 很多时候,你的问题的答案需要根据查询数据进行计算。 公式允许你通过使用数学运算组合多个聚合字段来创作自己的指标。

此外,在时间和空间中移动和重放数据是获取历史背景和了解关于现在的更多见解的有效方法。

在以下部分中,你将找到 10 个问题示例,你可以通过公式、时移和及时浏览数据,使用 Kibana 中的仪表板数据和地图可视化来回答这些问题。 尝试跟随你自己的数据或使用 Kibana 的示例数据集。 有问题吗? 前往我们的讨论论坛。

在名单上:

错误的比例在增加吗?
表现与上周相比如何?
这些数据与同行相比如何?
对我的平均水平影响最大的是什么?
与历史相比,原始收益/损失是多少?
收益/损失占过去业绩的百分比是多少?
数据是如何到达现在的位置的?
如何以交互方式探索空间中的仪表板?
这个指标的单位版本是什么?
我对上一时期的行业特定计算(例如“净推荐值”)是什么?
 
https://elasticstack.blog.csdn ... 83729 收起阅读 »

Elastic:如何使用 Elasticsearch PHP 客户端创建简单的搜索引擎

如果你正在寻找快速、强大的搜索功能,Elasticsearch 是合乎逻辑的选择。 这种可扩展的搜索引擎可以执行快速、高效的全文搜索和其他复杂查询。 你可以使用 PHP 创建一个简单的搜索引擎来演示 Elasticsearch 的功能。 在本教程中,我们将通过使用 Elasticsearch 构建一个简单的搜索引擎,向你展示如何使用 PHP 创建和索引文档。

原文链接:https://blog.csdn.net/UbuntuTo ... 02174
继续阅读 »
如果你正在寻找快速、强大的搜索功能,Elasticsearch 是合乎逻辑的选择。 这种可扩展的搜索引擎可以执行快速、高效的全文搜索和其他复杂查询。 你可以使用 PHP 创建一个简单的搜索引擎来演示 Elasticsearch 的功能。 在本教程中,我们将通过使用 Elasticsearch 构建一个简单的搜索引擎,向你展示如何使用 PHP 创建和索引文档。

原文链接:https://blog.csdn.net/UbuntuTo ... 02174 收起阅读 »

Elastic:Elastic Stack 8.0.0-alpha1 发布

虽然 7.x 次要版本继续提供一个又一个功能,但我们很高兴地宣布 8.0.0 的第一个公开 alpha。

在我们继续这个令人兴奋的消息之前,我们想提醒你这是一个 alpha 版本。 我们建议你与生产保持一定的距离。 不保证 8.0.0-alpha1 将与其他预览版本或 8.0.0 通用版 (GA) 兼容。

此外,8.0.0-alpha1 将不会在 Elastic Cloud 上可用。 但是,我们希望在未来几个月内提供预览版。
https://elasticstack.blog.csdn ... 31726
继续阅读 »
虽然 7.x 次要版本继续提供一个又一个功能,但我们很高兴地宣布 8.0.0 的第一个公开 alpha。

在我们继续这个令人兴奋的消息之前,我们想提醒你这是一个 alpha 版本。 我们建议你与生产保持一定的距离。 不保证 8.0.0-alpha1 将与其他预览版本或 8.0.0 通用版 (GA) 兼容。

此外,8.0.0-alpha1 将不会在 Elastic Cloud 上可用。 但是,我们希望在未来几个月内提供预览版。
https://elasticstack.blog.csdn ... 31726 收起阅读 »

社区日报 第1288期 (2021-08-13)

1、Elasticsearch 8.0.0-alpha 版本发布
https://www.elastic.co/cn/blog ... eased
2、Kubernetes Elasticsearch 实战
https://blog.flant.com/failure ... etes/
3、Elasticsearch 图书检索系统
https://dev.to/kiosan/how-to-b ... -40nk
 
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
继续阅读 »
1、Elasticsearch 8.0.0-alpha 版本发布
https://www.elastic.co/cn/blog ... eased
2、Kubernetes Elasticsearch 实战
https://blog.flant.com/failure ... etes/
3、Elasticsearch 图书检索系统
https://dev.to/kiosan/how-to-b ... -40nk
 
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup 收起阅读 »

​社区日报 第1287期 (2021-08-12)

1.更快速、更轻松地通过filebeat读取日志文件
https://www.elastic.co/blog/re ... ebeat
2.ElasticSearch聚合自定义排序
https://mp.weixin.qq.com/s/A2HmjnJCaxniNbTZNGYq4Q
3.es索引的一点点总结
https://www.jianshu.com/p/751a74e9fb15

编辑:金桥
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
继续阅读 »
1.更快速、更轻松地通过filebeat读取日志文件
https://www.elastic.co/blog/re ... ebeat
2.ElasticSearch聚合自定义排序
https://mp.weixin.qq.com/s/A2HmjnJCaxniNbTZNGYq4Q
3.es索引的一点点总结
https://www.jianshu.com/p/751a74e9fb15

编辑:金桥
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup 收起阅读 »

社区日报 第1286期 (2021-08-09)

1.借助路由巧妙消除写入长尾效应
https://cloud.tencent.com/docu ... 55434
2.App Search 入门
https://www.cnblogs.com/sanduz ... .html

3.Workplace Search 入门,解决工作中资料搜索难题
https://www.bilibili.com/s/video/BV1jC4y187DM

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
继续阅读 »
1.借助路由巧妙消除写入长尾效应
https://cloud.tencent.com/docu ... 55434
2.App Search 入门
https://www.cnblogs.com/sanduz ... .html

3.Workplace Search 入门,解决工作中资料搜索难题
https://www.bilibili.com/s/video/BV1jC4y187DM

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup 收起阅读 »

社区日报 第1285期 (2021-08-05)

1.使用match_only_text在日志数据集上节省10%的磁盘空间
https://www.elastic.co/blog/sa ... -text
2.DoorDash如何使用 Apache Kafka 和 Elasticsearch 构建更快的索引?
https://doordash.engineering/2 ... xing/
3.es 和 tsdb对比
https://www.jianshu.com/p/123a9721bb8e

编辑:金桥
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
继续阅读 »
1.使用match_only_text在日志数据集上节省10%的磁盘空间
https://www.elastic.co/blog/sa ... -text
2.DoorDash如何使用 Apache Kafka 和 Elasticsearch 构建更快的索引?
https://doordash.engineering/2 ... xing/
3.es 和 tsdb对比
https://www.jianshu.com/p/123a9721bb8e

编辑:金桥
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup 收起阅读 »

Elastic 7.14.0 版推出业界首个免费开放的 Limitless XDR

我们非常高兴地宣布 Elastic 7.14 版正式发布,包括我们基于 Elastic Stack(包括 Elasticsearch 和 Kibana)构建的 Elastic 企业搜索、可观测性和安全解决方案。 

Elastic 7.14 版为组织提供了首个免费开放的 Limitless XDR,能够在一个平台中提供一体化的 SIEM 和 Endpoint Security 功能。 

使用最新版本,能够更加容易地管理和监测来自越来越多的不同来源的数据。有了 Elastic 代理,安全从业人员可以从他们所有主机上的集成的勒索软件和恶意软件防御及修复功能中获益。Elastic 可观测性的用户可以通过 Elastic 代理更好地洞察他们的应用程序和基础架构,实现安全的集中化代理管理。现在,通过 Kibana 中集中管理的 Elastic 企业搜索,每个人都可以利用方便易用的单一管理界面来管理所有 Elastic 解决方案。

Elastic 7.14 版现已在 Elastic Cloud 上正式推出,这是唯一一个包含此最新版所有新功能的托管型 Elasticsearch 产品。您也可以下载 Elastic Stack 以及我们的云编排产品(Elastic Cloud Enterprise 和 Elastic Cloud for Kubernetes)进行自管型部署。
 
Elastic 7.14.0 版推出业界首个免费开发的 Limitless XDR
 
https://elasticstack.blog.csdn ... 77512
继续阅读 »
我们非常高兴地宣布 Elastic 7.14 版正式发布,包括我们基于 Elastic Stack(包括 Elasticsearch 和 Kibana)构建的 Elastic 企业搜索、可观测性和安全解决方案。 

Elastic 7.14 版为组织提供了首个免费开放的 Limitless XDR,能够在一个平台中提供一体化的 SIEM 和 Endpoint Security 功能。 

使用最新版本,能够更加容易地管理和监测来自越来越多的不同来源的数据。有了 Elastic 代理,安全从业人员可以从他们所有主机上的集成的勒索软件和恶意软件防御及修复功能中获益。Elastic 可观测性的用户可以通过 Elastic 代理更好地洞察他们的应用程序和基础架构,实现安全的集中化代理管理。现在,通过 Kibana 中集中管理的 Elastic 企业搜索,每个人都可以利用方便易用的单一管理界面来管理所有 Elastic 解决方案。

Elastic 7.14 版现已在 Elastic Cloud 上正式推出,这是唯一一个包含此最新版所有新功能的托管型 Elasticsearch 产品。您也可以下载 Elastic Stack 以及我们的云编排产品(Elastic Cloud Enterprise 和 Elastic Cloud for Kubernetes)进行自管型部署。
 
Elastic 7.14.0 版推出业界首个免费开发的 Limitless XDR
 
https://elasticstack.blog.csdn ... 77512 收起阅读 »

社区日报 第1284期 (2021-08-02)(深圳区meetup活动预告,08-21)

1、springboot集成Elasticsearch实现各种搜索功能
https://blog.csdn.net/wangxudo ... 75232

2、Elasticsearch Data tiers数据分层介绍与展望
https://cloud.tencent.com/deve ... 59323

3、优秀实践-你的ES怎么查的慢了?
https://www.shangmayuan.com/a/ ... .html

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
 
继续阅读 »
1、springboot集成Elasticsearch实现各种搜索功能
https://blog.csdn.net/wangxudo ... 75232

2、Elasticsearch Data tiers数据分层介绍与展望
https://cloud.tencent.com/deve ... 59323

3、优秀实践-你的ES怎么查的慢了?
https://www.shangmayuan.com/a/ ... .html

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
 
收起阅读 »

lastic日报 第1282期 (2021-07-30)

1、Elasticsearch 电商实战指南
https://www.coredna.com/blogs/ ... Dquuu
2、Ubuntu部署Elasticsearch实操
https://www.lionbloggertech.co ... dPost
3、Kibana 实现数据可视化实践
https://blog.skyline-ats.com/2 ... bana/
 

微信图片_20210730232315.jpg

 
 
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
 
继续阅读 »
1、Elasticsearch 电商实战指南
https://www.coredna.com/blogs/ ... Dquuu
2、Ubuntu部署Elasticsearch实操
https://www.lionbloggertech.co ... dPost
3、Kibana 实现数据可视化实践
https://blog.skyline-ats.com/2 ... bana/
 

微信图片_20210730232315.jpg

 
 
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
  收起阅读 »

社区日报 第1281期 (2021-07-29)

1、ESearch:搜索工程架构
https://www.jianshu.com/p/d7e37439faed
2、Apache Doris 在云真信智能决策分析平台的应用实践
https://xie.infoq.cn/article/4 ... a06d0
3、常见开源OLAP技术架构对比
https://zhuanlan.zhihu.com/p/266402829
 

编辑:wt
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
继续阅读 »
1、ESearch:搜索工程架构
https://www.jianshu.com/p/d7e37439faed
2、Apache Doris 在云真信智能决策分析平台的应用实践
https://xie.infoq.cn/article/4 ... a06d0
3、常见开源OLAP技术架构对比
https://zhuanlan.zhihu.com/p/266402829
 

编辑:wt
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup 收起阅读 »