Add  Tags feature (#187)

diff --git a/config.toml b/config.toml
index 79541d7..3ec1179 100644
--- a/config.toml
+++ b/config.toml
@@ -1,4 +1,4 @@
-baseURL = "https://skywalking.apache.org"
+baseURL = "/"
 title = "Apache SkyWalking"
 
 enableRobotsTXT = true
@@ -16,7 +16,9 @@
 # Useful when translating.
 enableMissingTranslationPlaceholders = true
 
-disableKinds = ["taxonomy", "taxonomyTerm"]
+# disableKinds = ["taxonomy", "taxonomyTerm"]
+[taxonomies]
+  tag = "tags"
 
 # Highlighting config
 pygmentsCodeFences = true
diff --git a/content/blog/2019-01-01-Understand-Trace/index.md b/content/blog/2019-01-01-Understand-Trace/index.md
index 3ce092c..4069788 100644
--- a/content/blog/2019-01-01-Understand-Trace/index.md
+++ b/content/blog/2019-01-01-Understand-Trace/index.md
@@ -3,6 +3,9 @@
 date: 2019-01-01
 author: Wu Sheng(Tetrate)
 description: "Distributed tracing is a necessary part of modern microservices architecture, but how to understand or use distributed tracing data is unclear to some end users. This blog overviews typical distributed tracing use cases with new visualization features in SkyWalking v6."
+
+tags:
+- tracing
 ---
 
 ## Background
diff --git a/content/blog/2019-01-25-mesh-loadtest/index.md b/content/blog/2019-01-25-mesh-loadtest/index.md
index 76dde8d..7d82a43 100644
--- a/content/blog/2019-01-25-mesh-loadtest/index.md
+++ b/content/blog/2019-01-25-mesh-loadtest/index.md
@@ -3,6 +3,8 @@
 date: 2019-01-25
 author: Hongtao Gao(Tetrate)
 description: "Service mesh receiver performance test on Google Kubernetes Engine."
+tags:
+- performance
 ---
 
 - Author: Hongtao Gao, Apache SkyWalking & ShardingShpere PMC
diff --git a/content/blog/2020-08-03-skywalking8-1-release/index.md b/content/blog/2020-08-03-skywalking8-1-release/index.md
index 442ae8b..daa1c48 100644
--- a/content/blog/2020-08-03-skywalking8-1-release/index.md
+++ b/content/blog/2020-08-03-skywalking8-1-release/index.md
@@ -49,4 +49,4 @@
 - Read more about the [SkyWalking 8.1 release highlights](https://github.com/apache/skywalking/blob/v8.1.0/CHANGES.md).
 - Read more about SkyWalking from Tetrate on our [blog](https://www.tetrate.io/blog/category/open-source/apache-skywalking/).
 - Get more SkyWalking updates on [Twitter](https://twitter.com/ASFSkyWalking).
-- Sign up to hear more about SkyWalking and observability from [Tetrate](https://www.tetrate.io/contact-us/).
\ No newline at end of file
+- Sign up to hear more about SkyWalking and observability from [Tetrate](https://www.tetrate.io/contact-us/).
diff --git a/content/blog/2021-01-01-300-contributors-mark/index.md b/content/blog/2021-01-01-300-contributors-mark/index.md
index 142aadd..569b4ce 100644
--- a/content/blog/2021-01-01-300-contributors-mark/index.md
+++ b/content/blog/2021-01-01-300-contributors-mark/index.md
@@ -419,4 +419,4 @@
 - zouyx
 - zshit
 - zxbu
-- zygfengyuwuzu
\ No newline at end of file
+- zygfengyuwuzu
diff --git a/content/blog/e2e-design/index.md b/content/blog/e2e-design/index.md
index 7ab511a..ece6c0b 100644
--- a/content/blog/e2e-design/index.md
+++ b/content/blog/e2e-design/index.md
@@ -3,6 +3,9 @@
 date: 2020-12-14
 author: "[Zhenxu Ke](https://github.com/kezhenxu94), Tetrate.io; [Huaxi Jiang](http://github.com/fgksgf), Committer; [Ke Zhang](http://github.com/HumbertZhang), Committer"
 description: "The design of Next Generation End-to-End Testing Framework"
+
+tags:
+- e2e
 ---
 
 NGE2E is the next generation End-to-End Testing framework that aims to help developers to set up, debug, and verify E2E tests with ease. It's built based on the lessons learnt from tens of hundreds of test cases in the SkyWalking main repo.
diff --git a/content/events/relase-apache-skywalking-nginx-lua-0-2-0/index.md b/content/events/relase-apache-skywalking-nginx-lua-0-2-0/index.md
index 818a73a..0df269e 100644
--- a/content/events/relase-apache-skywalking-nginx-lua-0-2-0/index.md
+++ b/content/events/relase-apache-skywalking-nginx-lua-0-2-0/index.md
@@ -8,4 +8,4 @@
 
 - Adapt the new v3 protocol.
 - Implement correlation protocol.
-- Support batch segment report.
\ No newline at end of file
+- Support batch segment report.
diff --git a/content/zh/2018-05-24-skywalking-net/index.md b/content/zh/2018-05-24-skywalking-net/index.md
index 5e80bf7..d20b75f 100755
--- a/content/zh/2018-05-24-skywalking-net/index.md
+++ b/content/zh/2018-05-24-skywalking-net/index.md
@@ -3,6 +3,8 @@
 date: 2018-05-24
 author: 刘浩扬(SkyWalking .NET Core 探针维护者)
 description: "SkyWalking .NET Core SDK 现已可用。"
+tags:
+- DotNet
 ---
 
 在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的、小的模块或者重用已经有的模块来构建复杂的系统。随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题。
@@ -65,4 +67,4 @@
 ## GitHub
 
 - SkyWalking Github Repo:[https://github.com/apache/incubator-skywalking](https://github.com/apache/incubator-skywalking/)
-- SkyWalking-NetCore Github Repo:https://github.com/OpenSkywalking/skywalking-netcore
\ No newline at end of file
+- SkyWalking-NetCore Github Repo:https://github.com/OpenSkywalking/skywalking-netcore
diff --git a/content/zh/2020-12-20-summer2020-activity-sharing2/index.md b/content/zh/2020-12-20-summer2020-activity-sharing2/index.md
index 854f7fd..265a254 100644
--- a/content/zh/2020-12-20-summer2020-activity-sharing2/index.md
+++ b/content/zh/2020-12-20-summer2020-activity-sharing2/index.md
@@ -3,6 +3,8 @@
 date: 2020-12-20
 author: 张可
 description: 学生(张可)参与暑期 2020 活动中 Apache SkyWalking 项目的感受与收获
+tags:
+- Open Source Promotion Plan 
 ---
 
 今年暑假期间我参加了开源软件供应链点亮计划—暑期 2020 的活动,在这个活动中,我主要参加了 Apache SkyWalking 的 Python Agent 的开发,最终项目顺利结项并获得了”最具潜力奖“,今天我想分享一下我参与这个活动以及开源社区的感受与收获。  
diff --git a/themes/docsy/assets/scss/_blog.scss b/themes/docsy/assets/scss/_blog.scss
index dde0ac4..9d3b183 100644
--- a/themes/docsy/assets/scss/_blog.scss
+++ b/themes/docsy/assets/scss/_blog.scss
@@ -19,17 +19,24 @@
     }
 
 
-
-    &.td-section{
-        @media (min-width: 1200px){
-            main{
-                flex: 0 0 100%!important;
-                max-width: 100%!important;
-            }
+}
+.tags-box{
+    span{
+        &:after{
+            content: ', ';
+            color: #888;
         }
-        .toc{
-           display: none!important;
+        &:last-child:after{
+            content: '';
         }
-
     }
+    .fa-tags {
+        font-size: 12px;
+        font-weight: normal;
+        padding-right: 0.15rem ;
+    }
+    .dn{
+        display: none;
+    }
+
 }
diff --git a/themes/docsy/assets/scss/_code.scss b/themes/docsy/assets/scss/_code.scss
index fa29743..74b5308 100644
--- a/themes/docsy/assets/scss/_code.scss
+++ b/themes/docsy/assets/scss/_code.scss
@@ -4,7 +4,7 @@
 	// Highlighted code.
     .highlight {
         @extend .card;
-        
+
         margin: 2rem 0;
         padding: 1rem;
         background-color: $gray-100;
@@ -40,7 +40,7 @@
         word-wrap: normal;
         background-color: $gray-100;
         padding: $spacer;
-     
+
 
         > code {
             padding: 0;
@@ -50,5 +50,6 @@
             white-space: pre;
             border: 0;
         }
+        color: #222!important;
     }
 }
diff --git a/themes/docsy/assets/scss/_custom_docs.scss b/themes/docsy/assets/scss/_custom_docs.scss
index 5aa1dd9..a098ec2 100644
--- a/themes/docsy/assets/scss/_custom_docs.scss
+++ b/themes/docsy/assets/scss/_custom_docs.scss
@@ -18,7 +18,6 @@
 
       &:hover {
         box-shadow: 0 0 8px #cccccc5e;
-        border-color: #fff;
       }
     }
 
diff --git a/themes/docsy/assets/scss/_custom_tags.scss b/themes/docsy/assets/scss/_custom_tags.scss
new file mode 100644
index 0000000..9d5e23e
--- /dev/null
+++ b/themes/docsy/assets/scss/_custom_tags.scss
@@ -0,0 +1,66 @@
+.td-taxonomy {
+  .tags-list {
+    li {
+      margin-bottom: 0.45rem;
+    }
+
+    a {
+      color: #2c3e50;
+
+      &:hover {
+        color: #3176d9;
+      }
+    }
+  }
+
+}
+
+.tags-wrapper {
+  margin-top: 4em;
+
+  .post-meta {
+    padding: 12px 0 14px;
+    color: #999;
+  }
+
+  .tags-box {
+    overflow: hidden;
+
+    li {
+      border-bottom: 1px dashed #dee2e6;
+      line-height: 22px;
+      padding: 10px 40px 10px 0;
+      position: relative;
+      a {
+        padding: 0;
+        color: #999;
+        word-break: break-word;
+
+        &:hover {
+          color: #72A1E5;
+        }
+      }
+
+      &:last-child {
+        border: none;
+      }
+
+    }
+
+    .count {
+      width: 30px;
+      height: 22px;
+      background-color: #4f9be8;
+      line-height: 22px;
+      color: #fff;
+      font-size: 13px;
+      text-align: center;
+      border-radius: 12px;
+      position: absolute;
+      right:10px;
+      bottom: 10px;
+    }
+  }
+
+}
+
diff --git a/themes/docsy/assets/scss/_styles_project.scss b/themes/docsy/assets/scss/_styles_project.scss
index c252478..140c491 100644
--- a/themes/docsy/assets/scss/_styles_project.scss
+++ b/themes/docsy/assets/scss/_styles_project.scss
@@ -9,6 +9,7 @@
 @import "custom_home.scss";
 @import "custom_docs.scss";
 @import "custom_downloads.scss";
+@import "custom_tags.scss";
 //common
 html, body {
   font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
diff --git a/themes/docsy/layouts/blog/baseof.html b/themes/docsy/layouts/blog/baseof.html
index 01a4efa..ac61145 100644
--- a/themes/docsy/layouts/blog/baseof.html
+++ b/themes/docsy/layouts/blog/baseof.html
@@ -11,8 +11,11 @@
     <div class="container-fluid td-outer">
       <div class="td-main">
         <div class="row container container-center">
-          <div class="toc d-none d-xl-block d-md-none d-sm-none col-xl-2 td-toc d-print-none">
+          <div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
+
             {{ partial "toc.html" . }}
+            {{ partial "tags-en.html" . }}
+
           </div>
           <main class="col-12 col-md-12 col-xl-10 pl-md-4 pr-md-4" role="main">
             {{ block "main" . }}{{ end }}
diff --git a/themes/docsy/layouts/blog/content.html b/themes/docsy/layouts/blog/content.html
index 7193b19..6f47c49 100644
--- a/themes/docsy/layouts/blog/content.html
+++ b/themes/docsy/layouts/blog/content.html
@@ -4,6 +4,18 @@
 	<div class="td-byline mb-4">
 		{{ with .Params.author }}{{ T "post_byline_by" }} <b>{{ . | markdownify }}</b> |{{ end}}
 		<time datetime="{{  $.Date.Format "2006-01-02" }}" class="text-muted">{{ $.Date.Format $.Site.Params.time_format_blog  }}</time>
+
+
+		{{ with .Params.tags }}
+		<p class="mt-1 tags-box">
+			<i class="fas fa-tags" aria-hidden="true"></i>Tags |
+			{{ range . }}
+			<span> <a href="{{ "tags" | absURL }}/{{ . | urlize }}">{{ . }}</a></span>
+			{{ end }}
+		</p>
+		{{ end }}
+
+
 	</div>
 	{{ .Content }}
 	{{ if (.Site.DisqusShortname) }}
diff --git a/themes/docsy/layouts/partials/tags-en.html b/themes/docsy/layouts/partials/tags-en.html
new file mode 100644
index 0000000..a1895a7
--- /dev/null
+++ b/themes/docsy/layouts/partials/tags-en.html
@@ -0,0 +1,17 @@
+<div class="tags-wrapper">
+    <div class="font-weight-bold post-meta ">
+        <i class="fas fa-tags pr-1" aria-hidden="true"></i>
+        Tags
+      </div>
+    <ul class="tags-box">
+        {{ range  $key, $taxonomy := .Site.Taxonomies.tags }}
+        {{ if (where $taxonomy.Pages "Section" "blog") }}
+        <li>
+            <a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
+            <span class="count">{{ .Count }}</span>
+        </li>
+        {{ end }}
+        {{ end }}
+    </ul>
+</div>
+
diff --git a/themes/docsy/layouts/partials/tags-zh.html b/themes/docsy/layouts/partials/tags-zh.html
new file mode 100644
index 0000000..cfde921
--- /dev/null
+++ b/themes/docsy/layouts/partials/tags-zh.html
@@ -0,0 +1,17 @@
+<div class="tags-wrapper">
+    <div class="font-weight-bold post-meta ">
+        <i class="fas fa-tags pr-1" aria-hidden="true"></i>
+        Tags
+      </div>
+    <ul class="tags-box">
+        {{ range  $key, $taxonomy := .Site.Taxonomies.tags }}
+        {{ if (where $taxonomy.Pages "Section" "zh") }}
+        <li>
+            <a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
+            <span class="count">{{ .Count }}</span>
+        </li>
+        {{ end }}
+        {{ end }}
+    </ul>
+</div>
+
diff --git a/themes/docsy/layouts/partials/tags.html b/themes/docsy/layouts/partials/tags.html
new file mode 100644
index 0000000..5760ad2
--- /dev/null
+++ b/themes/docsy/layouts/partials/tags.html
@@ -0,0 +1,101 @@
+<div class="tags-wrapper">
+    <div class="font-weight-bold post-meta ">
+        <i class="fas fa-tags pr-1" aria-hidden="true"></i>
+        Tags
+    </div>
+    <ul class="tags-box">
+
+        {{ range $key, $taxonomy := .Site.Taxonomies.tags }}
+
+        {{ if (where $taxonomy.Pages "Section" "blog") }}
+        <li class="blog dn" data-type="blog">
+            <a href="{{ .Page.Permalink }}" class="tag-link">{{ .Page.Title }}</a>
+            <span class="count">{{ .Count }}</span>
+        </li>
+        {{ end }}
+
+        {{ if (where $taxonomy.Pages "Section" "zh") }}
+        <li class="zh dn" data-type="zh">
+            <a href="{{ .Page.Permalink }}" class="tag-link">{{ .Page.Title }}</a>
+            <span class="count">{{ .Count }}</span>
+        </li>
+        {{ end }}
+
+        {{ end }}
+    </ul>
+</div>
+<script>
+  $(function () {
+    initTags();
+    bindClick();
+
+    function initTags() {
+      var type = getTye()
+      switch (type) {
+        case 'blog':
+          $('.tags-box .blog').show();
+          replaceState('blog')
+          break;
+        case 'zh':
+          $('.tags-box .zh').show();
+          replaceState('zh')
+          break;
+        default:
+          $('.tags-box li').show();
+      }
+    }
+
+    function bindClick() {
+      $('.tag-link').on('click', function (e) {
+        e.preventDefault()
+        var type = getQueryValue('type')
+        var url = $(this).attr('href')
+        window.location.href = url + '?type=' + type;
+      })
+    }
+
+    function getTye() {
+      var type = getQueryValue('type')
+      if (type) {
+        return type
+      }
+      var oldURL = document.referrer;
+      if (oldURL.indexOf('/blog/') > -1) {
+        return 'blog'
+      } else if (oldURL.indexOf('/zh/') > -1) {
+        return 'zh'
+      }
+    }
+
+    function replaceState(param) {
+      var newurl = updateQueryStringParameter(window.location.href, 'type', param);
+      window.history.replaceState({
+        path: newurl
+      }, '', newurl);
+    }
+
+    function updateQueryStringParameter(uri, key, value) {
+      if (!value) {
+        return uri;
+      }
+      var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
+      var separator = uri.indexOf('?') !== -1 ? "&" : "?";
+      if (uri.match(re)) {
+        return uri.replace(re, '$1' + key + "=" + value + '$2');
+      } else {
+        return uri + separator + key + "=" + value;
+      }
+    }
+
+    function getQueryValue(queryName) {
+      var reg = new RegExp("(^|&)" + queryName + "=([^&]*)(&|$)", "i");
+      var r = window.location.search.substr(1).match(reg);
+      if (r != null) {
+        return decodeURI(r[2]);
+      } else {
+        return null;
+      }
+    }
+
+  })
+</script>
diff --git a/themes/docsy/layouts/taxonomy/baseof.html b/themes/docsy/layouts/taxonomy/baseof.html
new file mode 100644
index 0000000..e01be34
--- /dev/null
+++ b/themes/docsy/layouts/taxonomy/baseof.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="{{ .Site.Language.Lang }}" class="no-js">
+  <head>
+    {{ partial "head.html" . }}
+    <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
+  </head>
+  <body class="td-{{ .Kind }}">
+    <header>
+      {{ partial "navbar.html" . }}
+    </header>
+
+    <div class="container-fluid td-outer">
+      <div class="td-main">
+        <div class="row container container-center">
+          <div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
+
+            {{ partial "tags.html" . }}
+
+          </div>
+          <main class="col-12 col-md-12 col-xl-10 pl-md-4 pr-md-4" role="main">
+            {{ block "main" . }}{{ end }}
+          </main>
+        </div>
+      </div>
+      {{ partial "footer.html" . }}
+    </div>
+
+    {{ partial "lightbox.html" . }}
+    {{ partial "sidebar-skywalking.html" . }}
+    {{ partial "scripts.html" . }}
+  </body>
+</html>
diff --git a/themes/docsy/layouts/taxonomy/tag.html b/themes/docsy/layouts/taxonomy/tag.html
new file mode 100644
index 0000000..f3dbb74
--- /dev/null
+++ b/themes/docsy/layouts/taxonomy/tag.html
@@ -0,0 +1,47 @@
+{{ define "main" }}
+{{ if .Parent.IsHome }}
+{{ $.Scratch.Set "blog-pages" (where .Site.RegularPages "Section" .Section) }}
+{{ else }}
+{{$.Scratch.Set "blog-pages" .Pages }}
+{{ end }}
+{{ $pag := .Paginate (( $.Scratch.Get "blog-pages").GroupByDate (i18n "year" ))}}
+{{ $pageGroups := $pag.PageGroups}}
+{{ if eq $pag.PageNumber 1 }}
+{{ end }}
+<div class="row">
+    <div class="col-12">
+        {{ range $pageGroups }}
+        <h2>{{ T "post_posts_in" }} {{ .Key }}</h2>
+
+        <ul class="list-unstyled mt-4">
+            {{ range .Pages }}
+            <li class="media mb-4">
+                <div class="media-body">
+                    <h5 class="mt-0 mb-1"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h5>
+                    <p class="mb-2 mb-md-3"><small class="text-muted">{{ .Date.Format ($.Param "time_format_blog") }} {{ T "ui_in"}} {{ .CurrentSection.LinkTitle }}</small>
+
+                        {{ with .Params.tags }}
+                        <small class="mt-1 tags-box">  |
+                        {{ range . }}
+                        <span><a href="{{ "tags" | absURL }}/{{ . | urlize }}" class="tag-link">{{ . }}</a></span>
+                        {{ end }}
+                    </small>
+                        {{ end }}
+
+                    </p>
+                    {{ partial "featured-image.html" (dict "p" . "w" 250 "h" 125 "class" "float-left mr-3 pt-1 d-none d-md-block") }}
+                    <p class="pt-0 mt-0">{{ .Description }}</p>
+                    <p class="pt-0"><a href="{{ .RelPermalink }}">{{ T "ui_read_more"}}</a></p>
+                </div>
+            </li>
+            {{ end }}
+        </ul>
+        {{ end }}
+    </div>
+</div>
+<div class="row pl-2 pt-2">
+    <div class="col">
+        {{ template "_internal/pagination.html" . }}
+    </div>
+</div>
+{{ end }}
diff --git a/themes/docsy/layouts/zh/baseof.html b/themes/docsy/layouts/zh/baseof.html
index 87587a7..2432e79 100644
--- a/themes/docsy/layouts/zh/baseof.html
+++ b/themes/docsy/layouts/zh/baseof.html
@@ -13,6 +13,7 @@
         <div class="row container container-center">
           <div class="toc d-none d-xl-block d-md-none col-xl-2 td-toc d-print-none">
             {{ partial "toc.html" . }}
+            {{ partial "tags-zh.html" . }}
           </div>
           <main class="col-12 col-md-12 col-xl-10 pl-md-4 pr-md-4" role="main">
             {{ block "main" . }}{{ end }}
diff --git a/themes/docsy/layouts/zh/content.html b/themes/docsy/layouts/zh/content.html
index 7193b19..382b5a2 100644
--- a/themes/docsy/layouts/zh/content.html
+++ b/themes/docsy/layouts/zh/content.html
@@ -4,6 +4,16 @@
 	<div class="td-byline mb-4">
 		{{ with .Params.author }}{{ T "post_byline_by" }} <b>{{ . | markdownify }}</b> |{{ end}}
 		<time datetime="{{  $.Date.Format "2006-01-02" }}" class="text-muted">{{ $.Date.Format $.Site.Params.time_format_blog  }}</time>
+
+		{{ with .Params.tags }}
+		<p class="mt-1 tags-box">
+			<i class="fas fa-tags" aria-hidden="true"></i>Tags |
+			{{ range . }}
+			<span> <a href="{{ "tags" | absURL }}/{{ . | urlize }}">{{ . }}</a></span>
+			{{ end }}
+		</p>
+		{{ end }}
+
 	</div>
 	{{ .Content }}
 	{{ if (.Site.DisqusShortname) }}