首页 » 网站建设 » phpmembercache下载技巧_这是我见过最酷的做事端日志收集筹划

phpmembercache下载技巧_这是我见过最酷的做事端日志收集筹划

访客 2024-11-28 0

扫一扫用手机浏览

文章目录 [+]

本篇给大家带来一套轻量级的kubernetes日志网络方案的干系先容。
我自己也在生产环境中利用过这套方案,令我意想不到的时它占用的kubernetes的资源比较与ELK这套方案真的是小巫见大巫。
那接下来就跟随这篇文章开始学习它吧……

1为什么要利用Loki

这篇文章着重先容了grafana公司开拓的loki日志网络运用。
Loki是一个轻量级的日志网络、剖析的运用,采取的是promtail的办法来获取日志内容并送到loki里面进行存储,终极在grafana的datasource里面添加数据源进行日志的展示、查询。

phpmembercache下载技巧_这是我见过最酷的做事端日志收集筹划

loki的持久化存储支持azure、gcs、s3、swift、local这5中类型,个中常用的是s3、local。
其余,它还支持很多种日志搜集类型,像最常用的logstash、fluentbit也在官方支持的列表中。

phpmembercache下载技巧_这是我见过最酷的做事端日志收集筹划
(图片来自网络侵删)
那它有哪些优点呢?支持的客户端,如Promtail,Fluentbit,Fluentd,Vector,Logstash和Grafana Agent首选代理Promtail,可以多来源提取日志,包括本地日志文件,systemd,Windows事宜日志,Docker日志记录驱动程序等没有日志格式哀求,包括JSON,XML,CSV,logfmt,非构造化文本利用与查询指标相同的语法查询日志日志查询时许可动态筛选和转换日志行可以轻松地皮算日志中的须要的指标引入时的最小索引意味着您可以在查询时动态地对日志进行切片和切块,以便在涌现新问题时回答它们云原生支持,利用Prometheus形式抓取数据各日志网络组件大略比拟

2Loki事情办法解惑日志解析格式

从上面的图中我们可以看到,它在解析日志的时候因此index为主的,index包括韶光戳和pod的部分label(其他label为filename、containers等),别的的这天记内容。
详细查询效果如下:

{app="loki",namespace="kube-public"}为索引

日志搜集架构模式

在利用过程中,官方推举利用promtail做为agent以DaemonSet办法支配在kubernetes的worker节点上搜集日志。
其余也可以用上面提到的其异日记网络工具来收取,这篇文章在结尾处会附上其他工具的配置办法。

Loki支配模式都有哪些呢

Loki由许多组件微做事构建而成,微做事组件有5个。
在这5个里面添加缓存用来把数据放起来加快查询。
数据放在共享存储里面配置memberlist_config部分并在实例之间共享状态,将Loki进行无限横向扩展。

在配置完memberlist_config部分后采取轮询的办法查找数据。
为了利用方便官方把所有的微做事编译成一个二进制,可以通过命令行参数-target掌握,支持all、read、write,我们在支配时根据日志量的大小可以指定不同模式

all(读写模式)

做事启动后,我们做的数据查询、数据写入都是来自这一个节点。
请看下面的这个图解:

read/write(读写分离模式)

在读写分离模式下运行时fronted-query查询会将流量转发到read节点上。
读节点上保留了querier、ruler、fronted,写节点上保留了distributor、ingester

微做事模式运行

微做事模式运行下,通过不同的配置参数启动为不同的角色,每一个进程都引用它的目标角色做事。

3大显技艺之做事端支配

上面我们讲了那么多关于loki的先容和它的事情模式,你也一定期待它是怎么支配的吧?!
该怎么支配、支配在哪里、支配后怎么利用等等问题都会涌如今你的脑海里。

在支配之前你须要准备好一个k8s集群才行哦。
那好,接下来耐着性子往下看……

AllInOne支配模式① k8s支配

我们从github高下载的程序是没有配置文件的,须要提前将文件准备一份。
这里供应了一份完全的allInOne配置文件,部分内容进行了优化。

配置文件内容如下所示

auth_enabled: falsetarget: allballast_bytes: 20480server: grpc_listen_port: 9095 http_listen_port: 3100 graceful_shutdown_timeout: 20s grpc_listen_address: "0.0.0.0" grpc_listen_network: "tcp" grpc_server_max_concurrent_streams: 100 grpc_server_max_recv_msg_size: 4194304 grpc_server_max_send_msg_size: 4194304 http_server_idle_timeout: 2m http_listen_address: "0.0.0.0" http_listen_network: "tcp" http_server_read_timeout: 30s http_server_write_timeout: 20s log_source_ips_enabled: true # http_path_prefix如果须要变动,在推送日志的时候前缀都须要加指定的内容 # http_path_prefix: "/" register_instrumentation: true log_format: json log_level: infodistributor: ring: heartbeat_timeout: 3s kvstore: prefix: collectors/ store: memberlist # 须要提前创建好consul集群 # consul: # http_client_timeout: 20s # consistent_reads: true # host: 127.0.0.1:8500 # watch_burst_size: 2 # watch_rate_limit: 2querier: engine: max_look_back_period: 20s timeout: 3m0s extra_query_delay: 100ms max_concurrent: 10 multi_tenant_queries_enabled: true query_ingester_only: false query_ingesters_within: 3h0m0s query_store_only: false query_timeout: 5m0s tail_max_duration: 1h0squery_scheduler: max_outstanding_requests_per_tenant: 2048 grpc_client_config: max_recv_msg_size: 104857600 max_send_msg_size: 16777216 grpc_compression: gzip rate_limit: 0 rate_limit_burst: 0 backoff_on_ratelimits: false backoff_config: min_period: 50ms max_period: 15s max_retries: 5 use_scheduler_ring: true scheduler_ring: kvstore: store: memberlist prefix: "collectors/" heartbeat_period: 30s heartbeat_timeout: 1m0s # 默认第一个网卡的名称 # instance_interface_names # instance_addr: 127.0.0.1 # 默认server.grpc-listen-port instance_port: 9095frontend: max_outstanding_per_tenant: 4096 querier_forget_delay: 1h0s compress_responses: true log_queries_longer_than: 2m0s max_body_size: 104857600 query_stats_enabled: true scheduler_dns_lookup_period: 10s scheduler_worker_concurrency: 15query_range: align_queries_with_step: true cache_results: true parallelise_shardable_queries: true max_retries: 3 results_cache: cache: enable_fifocache: false default_validity: 30s background: writeback_buffer: 10000 redis: endpoint: 127.0.0.1:6379 timeout: 1s expiration: 0s db: 9 pool_size: 128 password: 1521Qyx6^ tls_enabled: false tls_insecure_skip_verify: true idle_timeout: 10s max_connection_age: 8hruler: enable_api: true enable_sharding: true alertmanager_refresh_interval: 1m disable_rule_group_label: false evaluation_interval: 1m0s flush_period: 3m0s for_grace_period: 20m0s for_outage_tolerance: 1h0s notification_queue_capacity: 10000 notification_timeout: 4s poll_interval: 10m0s query_stats_enabled: true remote_write: config_refresh_period: 10s enabled: false resend_delay: 2m0s rule_path: /rulers search_pending_for: 5m0s storage: local: directory: /data/loki/rulers type: configdb sharding_strategy: default wal_cleaner: period: 240h min_age: 12h0m0s wal: dir: /data/loki/ruler_wal max_age: 4h0m0s min_age: 5m0s truncate_frequency: 1h0m0s ring: kvstore: store: memberlist prefix: "collectors/" heartbeat_period: 5s heartbeat_timeout: 1m0s # instance_addr: "127.0.0.1" # instance_id: "miyamoto.en0" # instance_interface_names: ["en0","lo0"] instance_port: 9500 num_tokens: 100ingester_client: pool_config: health_check_ingesters: false client_cleanup_period: 10s remote_timeout: 3s remote_timeout: 5s ingester: autoforget_unhealthy: true chunk_encoding: gzip chunk_target_size: 1572864 max_transfer_retries: 0 sync_min_utilization: 3.5 sync_period: 20s flush_check_period: 30s flush_op_timeout: 10m0s chunk_retain_period: 1m30s chunk_block_size: 262144 chunk_idle_period: 1h0s max_returned_stream_errors: 20 concurrent_flushes: 3 index_shards: 32 max_chunk_age: 2h0m0s query_store_max_look_back_period: 3h30m30s wal: enabled: true dir: /data/loki/wal flush_on_shutdown: true checkpoint_duration: 15m replay_memory_ceiling: 2GB lifecycler: ring: kvstore: store: memberlist prefix: "collectors/" heartbeat_timeout: 30s replication_factor: 1 num_tokens: 128 heartbeat_period: 5s join_after: 5s observe_period: 1m0s # interface_names: ["en0","lo0"] final_sleep: 10s min_ready_duration: 15sstorage_config: boltdb: directory: /data/loki/boltdb boltdb_shipper: active_index_directory: /data/loki/active_index build_per_tenant_index: true cache_location: /data/loki/cache cache_ttl: 48h resync_interval: 5m query_ready_num_days: 5 index_gateway_client: grpc_client_config: filesystem: directory: /data/loki/chunkschunk_store_config: chunk_cache_config: enable_fifocache: true default_validity: 30s background: writeback_buffer: 10000 redis: endpoint: 192.168.3.56:6379 timeout: 1s expiration: 0s db: 8 pool_size: 128 password: 1521Qyx6^ tls_enabled: false tls_insecure_skip_verify: true idle_timeout: 10s max_connection_age: 8h fifocache: ttl: 1h validity: 30m0s max_size_items: 2000 max_size_bytes: 500MB write_dedupe_cache_config: enable_fifocache: true default_validity: 30s background: writeback_buffer: 10000 redis: endpoint: 127.0.0.1:6379 timeout: 1s expiration: 0s db: 7 pool_size: 128 password: 1521Qyx6^ tls_enabled: false tls_insecure_skip_verify: true idle_timeout: 10s max_connection_age: 8h fifocache: ttl: 1h validity: 30m0s max_size_items: 2000 max_size_bytes: 500MB cache_lookups_older_than: 10s # 压缩碎片索引compactor: shared_store: filesystem shared_store_key_prefix: index/ working_directory: /data/loki/compactor compaction_interval: 10m0s retention_enabled: true retention_delete_delay: 2h0m0s retention_delete_worker_count: 150 delete_request_cancel_period: 24h0m0s max_compaction_parallelism: 2 # compactor_ring:frontend_worker: match_max_concurrent: true parallelism: 10 dns_lookup_duration: 5s # runtime_config 这里没有配置任何信息# runtime_config:common: storage: filesystem: chunks_directory: /data/loki/chunks fules_directory: /data/loki/rulers replication_factor: 3 persist_tokens: false # instance_interface_names: ["en0","eth0","ens33"]analytics: reporting_enabled: falselimits_config: ingestion_rate_strategy: global ingestion_rate_mb: 100 ingestion_burst_size_mb: 18 max_label_name_length: 2096 max_label_value_length: 2048 max_label_names_per_series: 60 enforce_metric_name: true max_entries_limit_per_query: 5000 reject_old_samples: true reject_old_samples_max_age: 168h creation_grace_period: 20m0s max_global_streams_per_user: 5000 unordered_writes: true max_chunks_per_query: 200000 max_query_length: 721h max_query_parallelism: 64 max_query_series: 700 cardinality_limit: 100000 max_streams_matchers_per_query: 1000 max_concurrent_tail_requests: 10 ruler_evaluation_delay_duration: 3s ruler_max_rules_per_rule_group: 0 ruler_max_rule_groups_per_tenant: 0 retention_period: 700h per_tenant_override_period: 20s max_cache_freshness_per_query: 2m0s max_queriers_per_tenant: 0 per_stream_rate_limit: 6MB per_stream_rate_limit_burst: 50MB max_query_lookback: 0 ruler_remote_write_disabled: false min_sharding_lookback: 0s split_queries_by_interval: 10m0s max_line_size: 30mb max_line_size_truncate: false max_streams_per_user: 0# memberlist_conig模块配置gossip用于在分发做事器、摄取器和查询器之间创造和连接。
# 所有三个组件的配置都是唯一的,以确保单个共享环。
# 至少定义了1个join_members配置后,将自动为分发做事器、摄取器和ring 配置memberlist类型的kvstorememberlist: randomize_node_name: true stream_timeout: 5s retransmit_factor: 4 join_members: - 'loki-memberlist' abort_if_cluster_join_fails: true advertise_addr: 0.0.0.0 advertise_port: 7946 bind_addr: ["0.0.0.0"] bind_port: 7946 compression_enabled: true dead_node_reclaim_time: 30s gossip_interval: 100ms gossip_nodes: 3 gossip_to_dead_nodes_time: 3 # join: leave_timeout: 15s left_ingesters_timeout: 3m0s max_join_backoff: 1m0s max_join_retries: 5 message_history_buffer_bytes: 4096 min_join_backoff: 2s # node_name: miyamoto packet_dial_timeout: 5s packet_write_timeout: 5s pull_push_interval: 100ms rejoin_interval: 10s tls_enabled: false tls_insecure_skip_verify: trueschema_config: configs: - from: "2020-10-24" index: period: 24h prefix: index_ object_store: filesystem schema: v11 store: boltdb-shipper chunks: period: 168h row_shards: 32table_manager: retention_deletes_enabled: false retention_period: 0s throughput_updates_disabled: false poll_interval: 3m0s creation_grace_period: 20m index_tables_provisioning: provisioned_write_throughput: 1000 provisioned_read_throughput: 500 inactive_write_throughput: 4 inactive_read_throughput: 300 inactive_write_scale_lastn: 50 enable_inactive_throughput_on_demand_mode: true enable_ondemand_throughput_mode: true inactive_read_scale_lastn: 10 write_scale: enabled: true target: 80 # role_arn: out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 inactive_write_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 read_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 inactive_read_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 chunk_tables_provisioning: enable_inactive_throughput_on_demand_mode: true enable_ondemand_throughput_mode: true provisioned_write_throughput: 1000 provisioned_read_throughput: 300 inactive_write_throughput: 1 inactive_write_scale_lastn: 50 inactive_read_throughput: 300 inactive_read_scale_lastn: 10 write_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 inactive_write_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 read_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800 inactive_read_scale: enabled: true target: 80 out_cooldown: 1800 min_capacity: 3000 max_capacity: 6000 in_cooldown: 1800tracing: enabled: true

把稳:

ingester.lifecycler.ring.replication_factor的值在单实例的情形下为1

ingester.lifecycler.min_ready_duration的值为15s,在启动后默认会显示15秒将状态变为ready

memberlist.node_name的值可以不用设置,默认是当前主机的名称

memberlist.join_members是一个列表,在有多个实例的情形下须要添加各个节点的主机名/IP地址。
在k8s里面可以设置成一个service绑定到StatefulSets。

query_range.results_cache.cache.enable_fifocache建议设置为false,我这里设置成了true

instance_interface_names是一个列表,默认的为["en0","eth0"],可以根据须要设置对应的网卡名称,一样平常不须要进行分外设置。

创建configmap

解释:将上面的内容写入到一个文件——>loki-all.yaml,把它作为一个configmap写入k8s集群。
可以利用如下命令创建:

kubectl create configmap --from-file ./loki-all.yaml loki-all

可以通过命令查看到已经创建好的configmap,详细操作详见下图

创建持久化存储

在k8s里面我们的数据是须要进行持久化的。
Loki网络起来的日志信息对付业务来说是至关主要的,因此须要在容看重启的时候日志能够保留下来。

那么就须要用到pv、pvc,后端存储可以利用nfs、glusterfs、hostPath、azureDisk、cephfs等20种支持类型,这里由于没有对应的环境就采取了hostPath办法。

apiVersion: v1kind: PersistentVolumemetadata: name: loki namespace: defaultspec: hostPath: path: /glusterfs/loki type: DirectoryOrCreate capacity: storage: 1Gi accessModes: - ReadWriteMany---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: loki namespace: defaultspec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeName: loki

创建运用

准备好k8s的StatefulSet支配文件后就可以直接在集群里面创建运用了。

apiVersion: apps/v1kind: StatefulSetmetadata: labels: app: loki name: loki namespace: defaultspec: podManagementPolicy: OrderedReady replicas: 1 selector: matchLabels: app: loki template: metadata: annotations: prometheus.io/port: http-metrics prometheus.io/scrape: "true" labels: app: loki spec: containers: - args: - -config.file=/etc/loki/loki-all.yaml image: grafana/loki:2.5.0 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 3 httpGet: path: /ready port: http-metrics scheme: HTTP initialDelaySeconds: 45 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 name: loki ports: - containerPort: 3100 name: http-metrics protocol: TCP - containerPort: 9095 name: grpc protocol: TCP - containerPort: 7946 name: memberlist-port protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /ready port: http-metrics scheme: HTTP initialDelaySeconds: 45 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 resources: requests: cpu: 500m memory: 500Mi limits: cpu: 500m memory: 500Mi securityContext: readOnlyRootFilesystem: true volumeMounts: - mountPath: /etc/loki name: config - mountPath: /data name: storage restartPolicy: Always securityContext: fsGroup: 10001 runAsGroup: 10001 runAsNonRoot: true runAsUser: 10001 serviceAccount: loki serviceAccountName: loki volumes: - emptyDir: {} name: tmp - name: config configMap: name: loki - persistentVolumeClaim: claimName: loki name: storage---kind: ServiceapiVersion: v1metadata: name: loki-memberlist namespace: defaultspec: ports: - name: loki-memberlist protocol: TCP port: 7946 targetPort: 7946 selector: kubepi.org/name: loki---kind: ServiceapiVersion: v1metadata: name: loki namespace: defaultspec: ports: - name: loki protocol: TCP port: 3100 targetPort: 3100 selector: kubepi.org/name: loki

在上面的配置文件中我添加了一些pod级别的安全策略,这些安全策略还有集群级别的PodSecurityPolicy,防止由于漏洞的缘故原由造成集群的全体崩溃,关于集群级别的psp,可以详见官方文档

验证支配结果

当看到上面的Running状态时可以通过API的办法看一下分发器是不是正常事情,当显示Active时正常才会正常分发日志流到网络器(ingester)

② 裸机支配

将loki放到系统的/bin/目录下,准备grafana-loki.service掌握文件重载系统做事列表

[Unit]Description=Grafana Loki Log IngesterDocumentation=https://grafana.com/logs/After=network-online.target[Service]ExecStart=/bin/loki --config.file /etc/loki/loki-all.yamlExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target

重载系统列表命令,可以直接系统自动管理做事:

systemctl daemon-reload# 启动做事systemctl start grafana-loki# 停滞做事systemctl stop grafana-loki# 重载运用systemctl reload grafana-loki4大显技艺之Promtail支配

支配客户端网络日志时也须要创建一个配置文件,按照上面创建做事真个步骤创建。
不同的是须要把日志内容push到做事端

① k8s支配创建配置文件

server: log_level: info http_listen_port: 3101clients: - url: http://loki:3100/loki/api/v1/pushpositions: filename: /run/promtail/positions.yamlscrape_configs: - job_name: kubernetes-pods pipeline_stages: - cri: {} kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: - __meta_kubernetes_pod_controller_name regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})? action: replace target_label: __tmp_controller_name - source_labels: - __meta_kubernetes_pod_label_app_kubernetes_io_name - __meta_kubernetes_pod_label_app - __tmp_controller_name - __meta_kubernetes_pod_name regex: ^;([^;]+)(;.)?$ action: replace target_label: app - source_labels: - __meta_kubernetes_pod_label_app_kubernetes_io_instance - __meta_kubernetes_pod_label_release regex: ^;([^;]+)(;.)?$ action: replace target_label: instance - source_labels: - __meta_kubernetes_pod_label_app_kubernetes_io_component - __meta_kubernetes_pod_label_component regex: ^;([^;]+)(;.)?$ action: replace target_label: component - action: replace source_labels: - __meta_kubernetes_pod_node_name target_label: node_name - action: replace source_labels: - __meta_kubernetes_namespace target_label: namespace - action: replace replacement: $1 separator: / source_labels: - namespace - app target_label: job - action: replace source_labels: - __meta_kubernetes_pod_name target_label: pod - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container - action: replace replacement: /var/log/pods/$1/.log separator: / source_labels: - __meta_kubernetes_pod_uid - __meta_kubernetes_pod_container_name target_label: __path__ - action: replace regex: true/(.) replacement: /var/log/pods/$1/.log separator: / source_labels: - __meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash - __meta_kubernetes_pod_annotation_kubernetes_io_config_hash - __meta_kubernetes_pod_container_name target_label: __path__

用上面的内容创建一个configMap,方法同上

创建DaemonSet文件

Promtail是一个无状态运用不须要进行持久化存储只须要支配到集群里面就可以了,还是同样的准备DaemonSets创建文件。

kind: DaemonSetapiVersion: apps/v1metadata: name: promtail namespace: default labels: app.kubernetes.io/instance: promtail app.kubernetes.io/name: promtail app.kubernetes.io/version: 2.5.0spec: selector: matchLabels: app.kubernetes.io/instance: promtail app.kubernetes.io/name: promtail template: metadata: labels: app.kubernetes.io/instance: promtail app.kubernetes.io/name: promtail spec: volumes: - name: config configMap: name: promtail - name: run hostPath: path: /run/promtail - name: containers hostPath: path: /var/lib/docker/containers - name: pods hostPath: path: /var/log/pods containers: - name: promtail image: docker.io/grafana/promtail:2.3.0 args: - '-config.file=/etc/promtail/promtail.yaml' ports: - name: http-metrics containerPort: 3101 protocol: TCP env: - name: HOSTNAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName volumeMounts: - name: config mountPath: /etc/promtail - name: run mountPath: /run/promtail - name: containers readOnly: true mountPath: /var/lib/docker/containers - name: pods readOnly: true mountPath: /var/log/pods readinessProbe: httpGet: path: /ready port: http-metrics scheme: HTTP initialDelaySeconds: 10 timeoutSeconds: 1 periodSeconds: 10 successThreshold: 1 failureThreshold: 5 imagePullPolicy: IfNotPresent securityContext: capabilities: drop: - ALL readOnlyRootFilesystem: false allowPrivilegeEscalation: false restartPolicy: Always serviceAccountName: promtail serviceAccount: promtail tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule创建promtail运用

kubectl apply -f promtail.yaml

利用上面这个命令创建后就可以看到做事已经创建好了。
接下来便是在Grafana里面添加DataSource查看数据了。

② 裸机支配

如果是裸机支配的情形下,须要对上面的配置文件做一下轻微的改动,变动clients得地址就可以,文件存放到/etc/loki/下,例如改成:

clients: - url: http://ipaddress:port/loki/api/v1/push

添加系统开机启动配置,service配置文件存放位置/usr/lib/systemd/system/loki-promtail.service内容如下

[Unit]Description=Grafana Loki Log IngesterDocumentation=https://grafana.com/logs/After=network-online.target[Service]ExecStart=/bin/promtail --config.file /etc/loki/loki-promtail.yamlExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target

启动办法同上面做事端支配内容

5Loki in DataSource添加数据源

详细步骤: Grafana->Setting->DataSources->AddDataSource->Loki

把稳点:

http的URL地址,运用、做事支配在哪个namespace下,就须要指定它的FQDN地址,它的格式是ServiceName.namespace。
如果默认在default下、创建的端口号是3100,就须要填写为http://loki:3100,这里为什么不写IP地址而写成做事的名字,是由于在k8s集群里面有个dns做事器会自动解析这个地址。

查找日志信息

6其他客户端配置Logstash作为日志网络客户端安装插件

在启动Logstash后我们须要安装一个插件,可以通过这个命令安装loki的输出插件,安装完成之后可以在logstash的output中添加信息。

bin/logstash-plugin install logstash-output-loki添加配置进行测试

完全的logstash配置信息,可以参考官网给出的内容LogstashConfigFile

output { loki { [url => "" | default = none | required=true] [tenant_id => string | default = nil | required=false] [message_field => string | default = "message" | required=false] [include_fields => array | default = [] | required=false] [batch_wait => number | default = 1(s) | required=false] [batch_size => number | default = 102400(bytes) | required=false] [min_delay => number | default = 1(s) | required=false] [max_delay => number | default = 300(s) | required=false] [retries => number | default = 10 | required=false] [username => string | default = nil | required=false] [password => secret | default = nil | required=false] [cert => path | default = nil | required=false] [key => path | default = nil| required=false] [ca_cert => path | default = nil | required=false] [insecure_skip_verify => boolean | default = false | required=false] }}

或者采取logstash的http输出模块,配置如下:

output { http { format => "json" http_method => "post" content_type => "application/json" connect_timeout => 10 url => "http://loki:3100/loki/api/v1/push" message => '"message":"%{message}"}' }}7Helm安装

如果你想简便安装的话,可以采取helm来安装。
helm将所有的安装步骤都进行了封装,简化了安装步骤。

对付想详细理解k8s的人来说,helm不太适宜。
由于它封装后自动实行,k8s管理员不知道各组件之间是如何依赖的,可能会造成误区。

废话不多说,下面开始helm安装

添加repo源

helm repo add grafana https://grafana.github.io/helm-charts更新源

helm repo update支配

默认配置

helm upgrade --install loki grafana/loki-simple-scalable

自定义namespace

helm upgrade --install loki --namespace=loki grafana/loki-simple-scalable

自定义配置信息

helm upgrade --install loki grafana/loki-simple-scalable --set "key1=val1,key2=val2,..."8故障办理方案1.502 BadGateWay

loki的地址填写禁绝确

在k8s里面,地址填写缺点造成了502。
检讨一下loki的地址是否因此下内容:

http://LokiServiceNamehttp://LokiServiceName.namespacehttp://LokiServiceName.namespace:ServicePort

grafana和loki在不同的节点上,检讨一下节点间网络通信状态、防火墙策略

2.Ingester not ready: instance xx:9095 in state JOINING

耐心等待一会,由于是allInOne模式程序启动须要一定的韶光。

3.too many unhealthy instances in the ring

将ingester.lifecycler.replication_factor改为1,是由于这个设置禁绝确造成的。
这个在启动的时候会设置为多个复制源,但当前只支配了一个以是在查看label的时候提示这个

4.Data source connected, but no labels received. Verify that Loki and Promtail is configured properlypromtail无法将网络到的日志发送给loki,容许检讨一下promtail的输出是不是正常promtail在loki还没有准备就绪的时候把日志发送过来了,但loki没有吸收到。
如果须要重新吸收日志,须要删除positions.yaml文件,详细路径可以用find查找一下位置promtail忽略了目标日志文件或者配置文件缺点造成的无法正常启动promtail无法在指定的位置创造日志文件官方文档:https://kubernetes.io/docs/concepts/security/pod-security-policy

相关文章

介绍皮肤设置,如何打造理想肌肤状态

随着科技的发展和人们对美的追求,皮肤设置已成为美容护肤的重要一环。如何根据皮肤类型、肤质、年龄等因素进行合理设置,已成为众多爱美人...

网站建设 2025-01-03 阅读1 评论0

介绍盖章制作,传承文化,彰显权威

自古以来,盖章在我国文化中具有重要的地位。从古代的官印、私印到现代的公章、合同章,盖章已成为一种独特的文化符号,承载着丰富的历史内...

网站建设 2025-01-03 阅读1 评论0

介绍监控破坏,技术手段与法律风险并存

随着科技的飞速发展,监控设备已遍布大街小巷,成为维护社会治安的重要手段。一些不法分子为了逃避法律制裁,开始研究如何破坏监控设备。本...

网站建设 2025-01-03 阅读1 评论0

介绍登录不上之谜,技术故障还是人为疏忽

随着互联网的普及,登录已成为人们日常生活中不可或缺的一部分。在享受便捷的登录不上这一问题也困扰着许多用户。本文将深入剖析登录不上之...

网站建设 2025-01-03 阅读1 评论0

介绍电脑键盘调出方法,让操作更高效

随着科技的发展,电脑已经成为了我们日常生活中不可或缺的工具。而电脑键盘,作为电脑输入设备,更是我们与电脑进行交流的桥梁。你是否知道...

网站建设 2025-01-03 阅读1 评论0

介绍磁力链,高效便捷的文件下载利器

在互联网高速发展的今天,文件下载已成为日常生活中不可或缺的一部分。而磁力链作为一种新型的文件下载方式,凭借其高效、便捷的特点,受到...

网站建设 2025-01-03 阅读1 评论0