Kubernetes ELLK
本次方案是按照 Elasticsearch + Logspout + Logstash + kibana 并且手机的日志可以被简单切分:
\
Elasticsearch-rc 配置文件:
apiVersion: v1``kind: ReplicationController``metadata:`` ``name: elasticsearch-logging-v1`` ``labels:`` ``k8s-app: elasticsearch-logging`` ``version: v1`` ``kubernetes.io``/cluster-service``: ``"true"``spec:`` ``replicas: 1`` ``selector:`` ``k8s-app: elasticsearch-logging`` ``version: v1`` ``template:`` ``metadata:`` ``labels:`` ``k8s-app: elasticsearch-logging`` ``version: v1`` ``kubernetes.io``/cluster-service``: ``"true"`` ``spec:`` ``nodeSelector:`` ``role: elk`` ``containers:`` ``- image: registry.aliyuncs.com``/slzcc/elasticsearch`` ``name: elasticsearch`` ``resources:`` ``limits:`` ``cpu: 1000m`` ``requests:`` ``cpu: 100m`` ``ports:`` ``- containerPort: 9200`` ``name: db`` ``protocol: TCP`` ``- containerPort: 9300`` ``name: transport`` ``protocol: TCP`` ``volumeMounts:`` ``- name: es-persistent-storage`` ``mountPath: ``"/usr/share/elasticsearch/data"`` ``volumes:`` ``- name: es-persistent-storage`` ``hostPath:`` ``path: ``"/data/elasticsearch" |
|---|
\
Elasticsearch-svc 配置文件:
apiVersion: v1``kind: Service``metadata:`` ``name: elasticsearch-logging`` ``labels:`` ``k8s-app: elasticsearch-logging`` ``kubernetes.io``/cluster-service``: ``"true"`` ``kubernetes.io``/name``: ``"Elasticsearch"``spec:`` ``ports:`` ``- port: 9200`` ``name: http`` ``protocol: TCP`` ``targetPort: db`` ``selector:`` ``k8s-app: elasticsearch-logging |
|---|
\
Kibana-rc 配置文件:
apiVersion: extensions``/v1beta1``kind: Deployment``metadata:`` ``name: kibana-logging`` ``labels:`` ``k8s-app: kibana-logging`` ``kubernetes.io``/cluster-service``: ``"true"``spec:`` ``replicas: 1`` ``selector:`` ``matchLabels:`` ``k8s-app: kibana-logging`` ``template:`` ``metadata:`` ``labels:`` ``k8s-app: kibana-logging`` ``spec:`` ``nodeSelector:`` ``role: elk`` ``containers:`` ``- name: kibana-logging`` ``image: registry.aliyuncs.com``/slzcc/kibana`` ``resources:`` ``# keep request = limit to keep this container in guaranteed class`` ``limits:`` ``cpu: 100m`` ``requests:`` ``cpu: 100m`` ``env``:`` ``- name: ``"ELASTICSEARCH_URL"`` ``value: ``"http://elasticsearch-logging:9200"`` ``ports:`` ``- containerPort: 5601`` ``name: ui`` ``protocol: TCP |
|---|
\
Kibana-svc 配置文件:
apiVersion: v1``kind: Service``metadata:`` ``name: kibana-logging`` ``labels:`` ``k8s-app: kibana-logging`` ``kubernetes.io``/cluster-service``: ``"true"`` ``kubernetes.io``/name``: ``"Kibana"``spec:`` ``ports:`` ``- port: 5601`` ``name: http`` ``protocol: TCP`` ``targetPort: ui`` ``selector:`` ``k8s-app: kibana-logging |
|---|
\
Logstash-configmap 配置文件:
| apiVersion: v1``kind: ConfigMap``metadata:`` ``name: logstash``data:`` ``logstash.conf: |-`` ``input {`` ``udp {`` ``port => 514`` ``type => syslog`` ``codec => json`` ``}`` ``tcp {`` ``port => 514`` ``type => syslog`` ``codec => json`` ``}`` ``}`` ``filter {`` ``if [``type``] == ``"syslog" {`` ``grok {`` ``match => { ``"message" => ``"%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%{TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:containerid}|-) +(?:% {NOTSPACE:containername}|-) +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" }`` ``}`` ``syslog_pri { }`` ``date {`` ``match => [ ``"syslog_timestamp"``, ``"MMM d HH:mm:ss"``, ``"MMM dd HH:mm:ss" ]`` ``}`` ``if !(``"_grokparsefailure" in [tags]) {`` ``mutate {`` ``replace => [ ``"@source_host"``, ``"%{syslog_hostname}" ]`` ``replace => [ ``"@message"``, ``"%{syslog_message}" ]`` ``}`` ``}`` ``mutate {`` ``remove_field => [ ``"syslog_hostname"``, ``"syslog_message"``, ``"syslog_timestamp" ]`` ``}`` ``}`` ``}`` ``output {`` ``elasticsearch {`` ``hosts => [``"elasticsearch-logging:9200"``]`` ``index => ``"k8s-%{type}-%{+YYYY.MM.dd}"`` ``document_type => ``"%{type}"`` ``workers => 1`` ``flush_size => 20000`` ``idle_flush_time => 10`` ``template_overwrite => ``true`` ``codec => json`` ``}`` ``} |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
\
Logstash-rc 配置文件:
apiVersion: v1``kind: ReplicationController``metadata:`` ``name: logstash`` ``labels:`` ``k8s-app: logstash`` ``version: v1`` ``kubernetes.io``/cluster-service``: ``"true"``spec:`` ``replicas: 1`` ``selector:`` ``k8s-app: logstash`` ``version: v1`` ``template:`` ``metadata:`` ``labels:`` ``k8s-app: logstash`` ``version: v1`` ``kubernetes.io``/cluster-service``: ``"true"`` ``spec:`` ``nodeSelector:`` ``role: elk`` ``containers:`` ``- image: registry.aliyuncs.com``/slzcc/logstash-build`` ``name: logstash`` ``resources:`` ``limits:`` ``cpu: 1000m`` ``requests:`` ``cpu: 100m`` ``ports:`` ``- containerPort: 514`` ``name: input`` ``protocol: TCP`` ``- containerPort: 514`` ``name: output`` ``protocol: UDP`` ``command``:`` ``- ``'/logstash-5.1.1/bin/logstash'`` ``- ``'-f'`` ``- ``'/etc/logstash/logstash.conf'`` ``- ``'-w 20'`` ``volumeMounts:`` ``- mountPath: ``"/etc/logstash/"`` ``name: config-volume`` ``volumes:`` ``- name: config-volume`` ``configMap:`` ``name: logstash |
|---|
\
Logstash-svc 配置文件:
apiVersion: v1``kind: Service``metadata:`` ``name: logstash`` ``labels:`` ``k8s-app: logstash`` ``kubernetes.io``/cluster-service``: ``"true"`` ``kubernetes.io``/name``: ``"logstash"``spec:`` ``ports:`` ``- port: 514`` ``name: input`` ``protocol: TCP`` ``targetPort: input``# - port: 514``# name: output``# protocol: UDP``# targetPort: output`` ``selector:`` ``k8s-app: logstash`` ``clusterIP: None |
|---|
\
Lospout-daemon 配置文件:
apiVersion: extensions``/v1beta1``kind: DaemonSet``metadata:`` ``name: logspout-elasticsearch`` ``labels:`` ``k8s-app: logspout-logging``spec:`` ``template:`` ``metadata:`` ``labels:`` ``name: logspout-elasticsearch`` ``spec:`` ``containers:`` ``nodeSelector:`` ``role: elk`` ``- name: logspout-elasticsearch`` ``image: registry.aliyuncs.com``/slzcc/logspout-logstash`` ``resources:`` ``limits:`` ``memory: 200Mi`` ``requests:`` ``cpu: 100m`` ``memory: 200Mi`` ``env``:`` ``- name: ``"ROUTE_URIS"`` ``value: ``"logstash+tcp://logstash:514"`` ``volumeMounts:`` ``- mountPath: ``"/var/run/docker.sock"`` ``name: sock`` ``volumes:`` ``- hostPath:`` ``path: ``"/var/run/docker.sock"`` ``name: sock`` ``terminationGracePeriodSeconds: 30 |
|---|