前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何将TKE/EKS集群事件日志持久化

如何将TKE/EKS集群事件日志持久化

原创
作者头像
聂伟星
修改于 2022-05-09 04:05:11
修改于 2022-05-09 04:05:11
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

腾讯云上的tke集群和eks集群的事件日志默认只会保留一个小时,有的时候,服务出现了问题,需要根据历史事件日志来进行排查下,因为历史事件日志只有1个小时,这样给我们排查带来了极大不便。腾讯云上默认是支持将集群的事件日志采集到cls,但是cls是需要收费的,而且很多人习惯用Elasticsearch来查询日志。 下面我们通过开源的eventrouter来将日志采集到Elasticsearch,然后通过kibana来查询事件日志。 eventrouter介绍说明:https://github.com/heptiolabs/eventrouter

eventrouter服务采用List-Watch机制,获取k8s集群中的实时事件events,并把这些事件推送到不同的通道,这里持久化方案是将eventrouter获取的事件保存到日志文件,然后在pod内部署一个filebeat的sidecar容器采集日志文件,将日志写到es,最终通过kinana来检索es里面的日志。

下面我们来具体部署下,本次部署是在tke集群,eks集群同样的方式部署既可。

1. 部署Elasticsearch

es集群的部署参考下面yaml创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  annotations:
    meta.helm.sh/release-name: weixnie-es-test
    meta.helm.sh/release-namespace: weixnie
  labels:
    app: elasticsearch-master
    app.kubernetes.io/managed-by: Helm
    chart: elasticsearch
    heritage: Helm
    release: weixnie-es-test
  name: elasticsearch-master
  namespace: weixnie
spec:
  podManagementPolicy: Parallel
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: elasticsearch-master
  serviceName: elasticsearch-master-headless
  template:
    metadata:
      labels:
        app: elasticsearch-master
        chart: elasticsearch
        heritage: Helm
        release: weixnie-es-test
      name: elasticsearch-master
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - elasticsearch-master
            topologyKey: kubernetes.io/hostname
      containers:
      - env:
        - name: node.name
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: cluster.initial_master_nodes
          value: elasticsearch-master-0,elasticsearch-master-1,elasticsearch-master-2,
        - name: discovery.seed_hosts
          value: elasticsearch-master-headless
        - name: cluster.name
          value: elasticsearch
        - name: network.host
          value: 0.0.0.0
        - name: ES_JAVA_OPTS
          value: -Xmx1g -Xms1g
        - name: node.data
          value: "true"
        - name: node.ingest
          value: "true"
        - name: node.master
          value: "true"
        image: ccr.ccs.tencentyun.com/tke-market/elasticsearch:7.6.2
        imagePullPolicy: IfNotPresent
        name: elasticsearch
        ports:
        - containerPort: 9200
          name: http
          protocol: TCP
        - containerPort: 9300
          name: transport
          protocol: TCP
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - |
              #!/usr/bin/env bash -e
              # If the node is starting up wait for the cluster to be ready (request params: 'wait_for_status=green&timeout=1s' )
              # Once it has started only check that the node itself is responding
              START_FILE=/tmp/.es_start_file

              http () {
                  local path="${1}"
                  if [ -n "${ELASTIC_USERNAME}" ] && [ -n "${ELASTIC_PASSWORD}" ]; then
                    BASIC_AUTH="-u ${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}"
                  else
                    BASIC_AUTH=''
                  fi
                  curl -XGET -s -k --fail ${BASIC_AUTH} http://127.0.0.1:9200${path}
              }

              if [ -f "${START_FILE}" ]; then
                  echo 'Elasticsearch is already running, lets check the node is healthy and there are master nodes available'
                  http "/_cluster/health?timeout=0s"
              else
                  echo 'Waiting for elasticsearch cluster to become ready (request params: "wait_for_status=green&timeout=1s" )'
                  if http "/_cluster/health?wait_for_status=green&timeout=1s" ; then
                      touch ${START_FILE}
                      exit 0
                  else
                      echo 'Cluster is not yet ready (request params: "wait_for_status=green&timeout=1s" )'
                      exit 1
                  fi
              fi
          failureThreshold: 3
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 3
          timeoutSeconds: 5
        resources: {}
        securityContext:
          capabilities:
            drop:
            - ALL
          runAsNonRoot: true
          runAsUser: 1000
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /usr/share/elasticsearch/data
          name: elasticsearch-master
      dnsPolicy: ClusterFirst
      initContainers:
      - command:
        - sysctl
        - -w
        - vm.max_map_count=262144
        image: ccr.ccs.tencentyun.com/tke-market/elasticsearch:7.6.2
        imagePullPolicy: IfNotPresent
        name: configure-sysctl
        resources: {}
        securityContext:
          privileged: true
          runAsUser: 0
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext:
        fsGroup: 1000
        runAsUser: 1000
      terminationGracePeriodSeconds: 120
  updateStrategy:
    type: RollingUpdate
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      creationTimestamp: null
      name: elasticsearch-master
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      volumeMode: Filesystem
    status:
      phase: Pending

2. 部署eventrouter

创建下eventrouter,然后配置下filebeat,这里是直接用filebeat采集到es,如果你想采集到kafaka,然后转存到es,可以配置一个logstash来实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ServiceAccount
metadata:
  name: eventrouter 
  namespace: weixnie
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: eventrouter 
rules:
- apiGroups: [""]
  resources: ["events"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: eventrouter 
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: eventrouter
subjects:
- kind: ServiceAccount
  name: eventrouter
  namespace: weixnie
---
apiVersion: v1
data:
  config.json: |- 
    {
      "sink": "glog"
    }
kind: ConfigMap
metadata:
  name: eventrouter-cm
  namespace: weixnie
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eventrouter
  namespace: weixnie
  labels:
    app: eventrouter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eventrouter
  template:
    metadata:
      labels:
        app: eventrouter
        tier: control-plane-addons
    spec:
      containers:
        - name: kube-eventrouter
          image: baiyongjie/eventrouter:v0.2
          imagePullPolicy: IfNotPresent
          command:
            - "/bin/sh"
          args:
            - "-c"
            - "/eventrouter -v 3 -log_dir /data/log/eventrouter"
          volumeMounts:
          - name: config-volume
            mountPath: /etc/eventrouter
          - name: log-path
            mountPath: /data/log/eventrouter
        - name: filebeat
          image: elastic/filebeat:7.6.2
          command:
            - "/bin/sh"
          args:
            - "-c"
            - "filebeat -c /etc/filebeat/filebeat.yml"
          volumeMounts:
          - name: filebeat-config
            mountPath: /etc/filebeat/
          - name: log-path
            mountPath: /data/log/eventrouter
      serviceAccount: eventrouter
      volumes:
        - name: config-volume
          configMap:
            name: eventrouter-cm
        - name: filebeat-config
          configMap:
            name: filebeat-config
        - name: log-path
          emptyDir: {}

---
apiVersion: v1
data:
  filebeat.yml: |-
    filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - "/data/log/eventrouter/*"

    setup.template.name: "tke-event"     # 设置一个新的模板,模板的名称
    setup.template.pattern: "tke-event-*" # 模板匹配那些索引,这里表示以nginx开头的所有的索引
    setup.template.enabled: false     # 关掉默认的模板配置
    setup.template.overwrite: true    # 开启新设置的模板
    setup.ilm.enabled: false  # 索引生命周期管理ilm功能默认开启,开启的情况下索引名称只能为filebeat-*, 通过setup.ilm.enabled false

    output.elasticsearch:
      hosts: ['elasticsearch-master:9200']
      index: "tke-event-%{+yyyy.MM.dd}"
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: weixnie

如果要测试日志是否采集成功,可以看下es的所有是否正常创建,es索引创建正常,则说明日志采集正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@VM-55-14-tlinux ~]# curl 10.55.254.57:9200/_cat/indices
green open .kibana_task_manager_1           31GLIGOZRSWaLvCD9Qi6pw 1 1    2 0    68kb    34kb
green open .apm-agent-configuration         kWHztrKkRJG0QNAQuNc5_A 1 1    0 0    566b    283b
green open ilm-history-1-000001             rAcye5j4SCqp_mcL3r3q2g 1 1   18 0  50.6kb  25.3kb
green open tke-event-2022.04.30             R4R1MOJiSuGCczWsSu2bVA 1 1  390 0 590.3kb 281.3kb
green open .kibana_1                        NveB_wCWTkqKVqadI2DNjw 1 1   10 1 351.9kb 175.9kb

3. 部署kibana

为了方便检索日志,这边创建一个kibana来检索事件日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
data:
  kibana.yml: |
    elasticsearch.hosts: http://elasticsearch-master:9200
    server.host: "0"
    server.name: kibana
kind: ConfigMap
metadata:
  labels:
    app: kibana
  name: kibana
  namespace: weixnie

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: kibana
  name: kibana
  namespace: weixnie
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - image: kibana:7.6.2
        imagePullPolicy: IfNotPresent
        name: kibana
        ports:
        - containerPort: 5601
          name: kibana
          protocol: TCP
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /usr/share/kibana/config/kibana.yml
          name: kibana
          subPath: kibana.yml
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: default
      serviceAccountName: default
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          defaultMode: 420
          name: kibana
        name: kibana
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: kibana
  name: kibana
  namespace: weixnie
spec:
  ports:
  - name: 5601-5601-tcp
    port: 5601
    protocol: TCP
    targetPort: 5601
  selector:
    app: kibana
  sessionAffinity: None
  type: ClusterIP

如果集群内安装了nginx-ingress,可以通过ingress来给kibana暴露一个域名开访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-intranet
  name: kibana-ingress
  namespace: weixnie
spec:
  rules:
  - host: kibana.tke.niewx.cn
    http:
      paths:
      - backend:
          serviceName: kibana
          servicePort: 5601
        path: /
        pathType: ImplementationSpecific

4. 测试检索事件

登录下kibana

然后创建下索引,这里filebeat设置的索引名称都是tke-event开头,kibana里面创建一个tke-event-*的索引即可。

下面我们直接删除一个测试pod,来产生事件,看下能否在kibana检索到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[niewx@VM-0-4-centos ~]$ k delete pod nginx-6ccd9d7969-f4rfj
pod "nginx-6ccd9d7969-f4rfj" deleted
[niewx@VM-0-4-centos ~]$ k get pod | grep nginx
nginx-6ccd9d7969-fbz9d            1/1     Running       0          23s
[niewx@VM-0-4-centos ~]$ k describe pod nginx-6ccd9d7969-fbz9d | grep -A 10 Events
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  58s   default-scheduler  Successfully assigned weixnie/nginx-6ccd9d7969-fbz9d to 172.16.22.23
  Normal  Pulling    58s   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     55s   kubelet            Successfully pulled image "nginx:latest"
  Normal  Created    55s   kubelet            Created container nginx
  Normal  Started    55s   kubelet            Started container nginx

这里能检索正常,说明我们的event日志持久化到es成功。

5. 定时清理es索引

事件日志是存在es里面,每天的事件都会写到一个索引,如果事件日志较多,保留太长的时间的事件会很容易将磁盘空间打满,这里我们可以写个脚本,然后配置下cronjob来定时清理es里面的索引。

清理索引脚本clean-es-indices.sh,这里需要传入2个参数,第一个参数是清理多少天以前的索引,第二个参数是es的host地址。还需要注意的是脚本里面日期的格式,因为我这边创建的索引名称日期是+%Y.%m.%d,所以脚本里面是这个,如果日期格式不是这个,需要自行修改脚本,然后重新打镜像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#/bin/bash

day=$1
es_host=$2

DATA=`date -d "${day} days ago" +%Y.%m.%d`

echo "开始清理  $DATA 索引"

#当前日期
time=`date`

#删除n天前的日志
curl -XGET "http://${es_host}:9200/_cat/indices/?v"|grep $DATA
if [ $? == 0 ];then
  curl -XDELETE "http://${es_host}:9200/*-${DATA}"
  echo "于 $time 清理 $DATA 索引!"
else
  echo "无 $DATA 天前索引需要清理"
fi

写个dockerfile来将脚本打到镜像里面,Dockerfile如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM centos:7
COPY clean-es-indices.sh /

如果没有docker环境构建,这里也可以直接使用我已经打好的镜像ccr.ccs.tencentyun.com/nwx_registry/clean-es-indices:latest

下面我们用这个镜像创建一个cronjob

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  labels:
    k8s-app: clean-es-indices
    qcloud-app: clean-es-indices
  name: clean-es-indices
  namespace: weixnie
spec:
  concurrencyPolicy: Allow
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      completions: 1
      parallelism: 1
      template:
        metadata:
          labels:
            k8s-app: clean-es-indices
            qcloud-app: clean-es-indices
        spec:
          containers:
          - args:
            - sh -x /clean-es-indices.sh 3 elasticsearch-master
            command:
            - sh
            - -c
            image: ccr.ccs.tencentyun.com/nwx_registry/clean-es-indices:latest
            imagePullPolicy: Always
            name: clean-es-indices
            resources: {}
            securityContext:
              privileged: false
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          imagePullSecrets:
          - name: qcloudregistrykey
          restartPolicy: OnFailure
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  schedule: 0 */23 * * *
  successfulJobsHistoryLimit: 3
  suspend: false

这里的cronjob执行策略是在每小时的第 0 分钟执行, 每隔23小时执行一次,相当于每一天执行一次。启动命令里面的参数,我这里配置是3和elasticsearch-master,我这里是清理3天之前的索引,因为es和cronjob是在同namespace,所以我这里直接通过service name访问。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
蜻蜓折翼——谷歌搜索中国项目恩仇录
据外媒报道,谷歌暂停了一项在中国的数据收集项目,为推出符合中国法律法规的搜索引擎带来沉重打击。
新智元
2018/12/28
4470
蜻蜓折翼——谷歌搜索中国项目恩仇录
回顾 | 谷歌搜索中国项目恩仇录
据外媒报道,谷歌暂停了一项在中国的数据收集项目,为推出符合中国法律法规的搜索引擎带来沉重打击。
昱良
2018/12/28
5250
黄了。Google中国版搜索
据The Intercept消息,Google决定关闭该项目的整体数据来源,内部投注的资源也转移到其他发展中国家——如印度、印尼和巴西。
量子位
2018/12/28
5830
外媒:Google被迫终止了搜索引擎业务重返中国的计划,转而搜集分析全球华人的搜索数据
265网址导航页只是“蜻蜓计划”(又称Dragonfly)的数据组成部分之一,Google此计划的数据分析团队,正在转向研究来自美国、马来西亚等国家的中文搜索请求,从而研究全球华人的搜索行为数据。
数据猿
2018/12/28
5150
外媒:Google被迫终止了搜索引擎业务重返中国的计划,转而搜集分析全球华人的搜索数据
谷歌搜索重返中国彻底“凉凉”
网传了半年之久的 Google “蜻蜓”(Dragonfly)计划终于有了确切的眉目,那就是停止这一做法。
AI科技大本营
2018/12/28
6250
谷歌搜索重返中国彻底“凉凉”
Google把百度当工具使,进行审查版搜索引擎的研发
导读:上周 The Intercept 爆料谷歌计划在中国大陆重启其搜索业务,目前谷歌还没有对此传闻做出正面回应,而 9 日,The Intercept 又爆料谷歌为了遵守中国方面的审查要求,一直在通过其中国网站 265.com 收集需要过滤的内容。
IT阅读排行榜
2018/08/17
4930
四年又四年,苹果搜索引擎要“胎死腹中”?
据外媒近日报道,苹果的搜索引擎团队核心成员 Srinivasan Venkatachary 跳槽谷歌,这对于苹果的搜索引擎项目来说,无异于雪上加霜 — 毕竟苹果为了做出能与谷歌正面竞争的搜索引擎,已经努力了四年。随着核心成员的离开,苹果的搜索引擎项目很可能“胎死腹中”。
深度学习与Python
2022/11/28
1960
挣扎中的谷歌“蜻蜓项目”,Google 搜索到底能不能回归大陆?
相信身在互联网圈的人,关于谷歌的“蜻蜓项目”,大家都应该有所耳闻。“蜻蜓项目”就是关于谷歌推出准备试图推出一款符合中国法律的搜索产品。说白了,就是一款中国特别版的搜索引擎。
非著名程序员
2018/12/24
8860
人民日报推文:欢迎Google重返中国大陆,但必须遵守中国法律
近日,谷歌将回归的消息充斥着各大媒体。尽管是否回归还是一个未知数,但是一切迹象表明,谷歌回归只是时间问题。
大数据文摘
2018/08/08
6170
人民日报推文:欢迎Google重返中国大陆,但必须遵守中国法律
不满国内监管,谷歌回归中国计划再遭抗议
自从2010年退出中国市场开始,谷歌回归中国的呼声一直此起彼伏地没有消停过,却一直没有如愿过。而与国内很多用户不同的是,有一群人却不希望谷歌重回中国,而这些人正是谷歌自己的雇员。
FB客服
2018/12/21
5000
谷歌CEO暗讽百度医疗搜索?
8 月 1 日,外媒 The Intercept 获得的 Google 内部文件以及知情人士的消息显示,Google 计划让搜索服务重返中国。据悉该项目的内部代号为 Dragonfly,始于 2017 年春季。
AI科技大本营
2018/11/06
5050
AI一分钟|特斯拉股价收跌近 5%,私有化引发市场疑虑;三星发布智能音箱Galaxy Home
8 月 10 日早间消息,特斯拉股价周四收跌近 5%,抹去其 CEO 马斯克宣布私有化计划之后的涨幅。此前有报道称,监管者对特斯拉私有化怀有担忧,而市场也担心交易难以完成。
AI科技大本营
2018/08/17
2600
AI一分钟|特斯拉股价收跌近 5%,私有化引发市场疑虑;三星发布智能音箱Galaxy Home
人民日报发推欢迎Google回归,但前提是遵守中国法律
8 月 6 日,人民日报在社交媒体平台 Twitter、Facebook 上刊登了一篇标题为“Stability prerequisite for China’s internet opening up”(《稳定是中国互联网开放的重要前提》)的文章。
AI科技大本营
2018/08/17
3210
人民日报发推欢迎Google回归,但前提是遵守中国法律
重返中国遥遥无期,Google 中国要“文化先行”
今年8月 1 日将北京总部从五道口的科建大厦搬到融科资讯中心后,Google中国又短暂地出现在了中国人的视野里,此时距离Google 进入中国已经过去了 10 年。虽然 Google 中国在前 4 年
BestSDK
2018/02/27
7070
重返中国遥遥无期,Google 中国要“文化先行”
李飞飞重返祖国执掌Google AI中国团队:不忘初心,中国已觉醒
李根 假装发自 上海 量子位 出品 | 公众号 QbitAI 刚刚在上海,李飞飞正式宣布了一个激动人心的消息。 首先是Google AI中国中心正式成立。 其次,李飞飞这位享誉全球的AI学者、Google Cloud人工智能和机器学习首席科学家,将重返祖国工作,筹建并执掌Google AI中国团队。 这个中心由李飞飞和李佳共同领导。李飞飞将会负责中心的研究工作,也会统筹Google Cloud AI、Google Brain以及中国本土团队的工作。 在回答量子位提问时,李飞飞表示从1月入职Google时就开
量子位
2018/03/23
8700
李飞飞重返祖国执掌Google AI中国团队:不忘初心,中国已觉醒
谷歌CEO:不希望魏则西事件再发生,中国版搜索引擎可以做到更好
导读:谷歌 CEO Sundar Pichai 本周一已承认谷歌确实在开发中国审核版的谷歌搜索引擎,并表示能满足超过 99% 的搜索请求。
IT阅读排行榜
2018/11/07
4660
【原创】搜索引擎百度已死?是找出身边蠢货的时候了!
文章指责百度搜索结果一半以上会指向百度自家产品,尤其是百家号,而百家号充斥着大量营销和质量低劣的内容,也导致百度搜索结果的内容质量大幅下滑,百度作为搜索引擎名存实亡。
物流IT圈
2019/07/16
5100
【原创】搜索引擎百度已死?是找出身边蠢货的时候了!
TensorFlow全家桶的落地开花 | 2019 Google开发者日
Android 10 原生支持 5G,Flutter 1.9、Dart 2.5 正式发布
AI科技大本营
2019/09/17
9840
TensorFlow全家桶的落地开花 | 2019 Google开发者日
谷歌全球大罢工!包庇“安卓之父”性骚扰惹众怒,员工提出5项要求
今天,北京时间11月2日,在硅谷总部,在纽约、柏林、都柏林、东京……谷歌20多个全球分舵所在城市,上千名谷歌员工(仅总部就有1千多人),以罢工和散步方式,抗议谷歌管理层包庇性骚扰指控以及性别歧视。
量子位
2018/12/06
5720
抛弃 Google,Debian 改将 DuckDuckGo 作为默认搜索引擎
作者 | 闫园园 近日,据外媒报道,Debian 发布公告称由于隐私原因,将 Chromium 浏览器的默认搜索引擎从 Google 改为 DuckDuckGo。DuckDuckGo 是一个专注于隐私保护的搜索引擎,承诺不会跟踪使用者,而 Chromium 则是由 Google 主导开发的网页浏览器。 这个提议早在 2020 年 4 月 6 日就被提出,只不过近日才得以通过。更改的原因如公告中所述: 出于隐私原因,将默认搜索引擎更改为 DuckDuckGo。在设置 -> 搜索引擎下设置不同的搜索引擎(关闭
深度学习与Python
2023/03/29
6570
抛弃 Google,Debian 改将 DuckDuckGo 作为默认搜索引擎
推荐阅读
相关推荐
蜻蜓折翼——谷歌搜索中国项目恩仇录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档