Git Product home page Git Product logo

instana-grafana-datasource's Introduction

Latest

Instana Data Source

This is a Grafana datasource for showing metrics from Instana AI-Powered APM for dynamic applications.

Requirements

Attention: Grafana 10.0.0+ is suggested.

For On-premise customers Instana Release 260+ is required.

Features

  • Dynamic Focus queries
  • Applications and Websites
  • Automatic completion for available types and metrics
  • Utilizes Instana REST API
  • Security via access token

Breaking Changes

  • Secure Information Storage:

    • To align with the latest updates from the Grafana team, all secure information, including the API key, should now be stored in secureJsonData instead of jsonData.
  • API Token Migration:

    • The API token, currently stored in jsonData, is now migrated to secureJsonData starting from version 4.0.0. This is a breaking change, and existing users must reauthenticate their datasources.
  • Configuration Page Update:

    • To prevent data source breakage, existing users must reauthenticate by entering the URL and API Token on the configuration page.
  • Migration Instructions:

    1. Reauthentication Steps:

      • Visit the configuration page and re-enter the URL and API Token for each datasource.
    2. Proxy Authentication:

      • Authentication now only takes place over the data source proxy method. Use-proxy via authentication is the only option in our datasource plugin.
    3. Grafana Version Requirement:

      • This version (4.0.0) is now the base version of instana-grafana-datasource, and Grafana 10.0.0 or higher is required.
    4. API Token Reset:

      • Once credentials are saved, the API Token is stored on the server. Users have the option to reset the API Token using the provided reset key Button.
  • Additional Notes

    • Ensure all existing datasources are reauthenticated to prevent disruptions.
    • Refer to the updated documentation for any additional information or troubleshooting steps related to authentication changes.

We appreciate your understanding and cooperation during this transition. If you encounter any issues or have questions, please reach out to our support team.

Thank you for using instana-grafana-datasource!

Troubleshooting

When troubleshooting, please open a ticket at https://www.ibm.com/mysupport to get your issues/questions resolved the fastest way possible.

Searching for answers and best pratices? Check our IBM Instana Community.

Configuration

This datasource uses the Instana REST API to query the metric values. First of all you will need to generate an API token. Use this token along with the URL for your Instana account e.g. https://prod-acme.instana.io

To use the Grafana server as a proxy for querying Instana REST API please check Use proxy.

To enable metrics for offline snapshots please check Enable offline snapshots. For On-premise customers Instana Release 260 is required.

The configuration allows the setting of a limit for the different categories that this plugin offers. Numeric values can be entered in order to make sure that queries do not exceed a certain amount of window size that they query. This can be useful when experiencing Grafana performance issues.

datasource configuration

Usage

Query Editor

empty query editor

To start, enter the Dynamic Focus query. This is exactly the same as used in the Instana dashboard; you can test your queries in Instana and then copy and paste them into Grafana. NOTE Saved filters are not currently supported by the Grafana datasource plugin.

Infrastructure built-in metrics

Once you filled in the query the available types dropdown will be automatically populated, select the type you want.

As you select the type, the available metrics dropdown will be automatically populated, select the metric you want.

If your Dynamic Focus query matches multiple instances then, the returned dataset will include metrics from all those matching instances, providing graphs with multiple plots like the example below.

multiple plot graph

Infrastructure custom metrics

To choose custom metrics matching your query you need to select "Infrastructure custom metrics" from the category dropdown, which will automatically populate the available types dropdown.

As you select the type, the available metrics dropdown will be automatically populated, select the metric you want. As there might be a huge amount of custom metrics, you can specify an optional filter to reduce to a corresponding subset.

If your Dynamic Focus query matches, the returned dataset will include metrics providing graphs like the example below.

custom plot graph

Infrastructure Analyze

For self-hosted installations, BeeInstana is required for this endpoint group. See this documentation for enabling BeeInstana.

To choose infrastructure analyze metrics, you need to select "Infrastructure Analyze" from the category dropdown. This will populate the other dropdown lists.

The "Entity types" dropdown will contain a list of all entity types sorted by entity name. Once you select the entity type, the available metrics dropdown will be automatically populated.

You should provide the appropriate group-by tag in the "Group by" text box. You can easily find the "Group by tag" option within the Instana dashboards. Then select the metric you want.

Most metrics will have more than one aggregation type (SUM, MEAN,etc...) from which appropriate one can be chosen.

We currently fully support filtering in Infrastructure Analyze. To use this feature, you must fill the "TagFilterExpression" text box with a tagFilterExpression which contains an array of desired filter objects. You can easily get the tagFilterExpression from the JSON tree under API query session of the Instana Infrastructure Analytics dashboard. If your selection matches, the returned dataset will include metrics providing graphs like the example below.

infra analyze plot graph infra analyze plot graph

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $host - the corresponding host
  • $pid - the corresponding PID
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $type - the entity type
  • $service - the service label (for endpoints only)
  • $name - a label alternative
  • $index - index in the list

Application metrics

A simple version of getting metrics related to one or multiple applications. Once an application and a metric are selected, the graphs will be drawn (see example below). The icon next to the application indicates whether the displayed information is based on calls that are performed by the consumers of the application (INBOUND) or based on all calls that are performed within this application, by both consumers as well as internally (ALL). These options are only enabled once an application is selected.

application metric plot graph

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $application - application label
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $key - metric key with aggregation and rollup
  • $index - index in the list

If no custom format is provided the default label '$label ($application) $metric' will be shown.

Service metrics

Allows to show metrics related to a service. Services can either be selected as standalone or in combination with an Application Perspective to show more detailed metric data. As soon as an application is selected the dropdown menu of possible services reloads and only shows services that are actually being used by the selected application. Together with an application it is possible to indicate whether the displayed information is based on calls that are performed by the consumers of the application (INBOUND) or based on all calls that are performed within this application, by both consumers as well as internally (ALL). These options are only enabled once an application is selected. In case only a service is selected (without any application) the displayed information will be based on all calls that are performed within this application, by both consumers as well as internally.

service metric plot graph

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $service - service label
  • $application - application label (if selected)
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $key - metric key with aggregation and rollup
  • $index - index in the list

If no custom format is provided the default label '$label ($service) $metric' will be shown.

Endpoint metrics

Allows to show metrics related to an endpoint. Endpoints can either be selected as standalone or in combination with an Application Perspective and service to show more detailed metric data. Since multiple endpoints can have the same name, it is recommended to select an application, then a service, and finally an endpoint in order to be sure to select the correct endpoint. Possible selectable items are reloaded and cached each time a service and an application is changed. Together with an application it is possible to indicate whether the displayed information is based on calls that are performed by the consumers of the application (INBOUND) or based on all calls that are performed within this application, by both consumers as well as internally (ALL). These options are only enabled once an application is selected. In case only an endpoint is selected (without any application) the displayed information will be based on all calls that are performed within this application, by both consumers as well as internally. This is independent on a selected service.

endpoint metric plot graph

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $application - application label (if selected)
  • $service - service label (if selected)
  • $endpoint - endpoint label
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $key - metric key with aggregation and rollup
  • $index - index in the list

If no custom format is provided the default label '$label ($endpoint) $metric' will be shown.

Analyze application calls

To choose application metrics you need to select "Analyze application calls" from the category dropdown. This will populate the other dropdown lists.

The "Application" dropdown will contain a list of all applications sorted by their name.

Most metrics will have more than one aggregation type (SUM, MEAN, ...) and you can choose which one to use.

It's also possible to add additional filters via "add Filter". Multiple filters are concatenated using "AND".

If your selection matches, the returned dataset will include metrics providing graphs like the example below.

application plot graph

If more then 20 metics are fetched, a warning appears that not all results are shown. Add Filter to narrow down the data.

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $application - application label
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $key - metric key with aggregation and rollup
  • $index - index in the list

If no custom format is provided the default label '$label ($application) $metric' will be shown.

Analyze websites

To choose EUM website metrics you need to select "Analyze websites" from the category dropdown. This will populate the other dropdown lists.

The "Website" dropdown will contain a list of all websites sorted by their pageloads.

Most metrics will have more than one aggregation type (SUM, MEAN, ...) and you can choose which one to use.

It's also possible to add additional filters via "add Filter". Multiple filters are concatenated using "AND".

If your selection matches, the returned dataset will include metrics providing graphs like the example below.

website plot graph

A default label '$label ($website) $metric' will be shown.

Analyze mobile app

To choose EUM mobile app metrics you need to select "Analyze mobile app" from the category dropdown. This will populate the other dropdown lists.

The "Mobile-app" dropdown will contain a list of all mobile apps sorted by their session starts.

Most metrics will have more than one aggregation type (SUM, MEAN, ...) and you can choose which one to use.

It's also possible to add additional filters via "add Filter". Multiple filters are concatenated using "AND".

If your selection matches, the returned dataset will include metrics providing graphs like the example below.

mobile plot graph mobile plot graph

Change legend format

To adjust the legend display you can provide an own "Legend format". Supported values for replacement are:

  • $label - the entity label
  • $website - website label
  • $type - entity type
  • $timeShift - corresponding timeShift
  • $metric - the displayed metric
  • $key - metric key with aggregation and rollup
  • $index - index in the list

If no custom format is provided the default label '$label ($website) $metric' will be shown.

SLO Information

Instana brings two collections Service levels information into Grafana.

  • Service levels objectives (beta), by the predefined SLO target from configurations, including:

    • Service level status (single number)
    • Predefined service level target (single number)
    • Total error budget (single number)
    • Remain error budget (single number)
    • Spent error budget (single number)
    • Error chart/Error budget consumption (timeseries)
    • Error budget accumulation chart (timeseries)
    • Error budget remain chart (timeseries)
    • Voilation chart (timeseries)
  • Service level objectives widgets, by the given SLO target from parameters, including:

    • SLI (single number)
    • Remain error budget (single number)
    • Timeseries (voilation in timeseries)

Both of them can be selected from the metric category drop-down list. Accordingly, SLO/SLI configuration and value types can be selected for display.

Difference between them is that SLO target is not defined for the SLI configuration from Service level objectives widgets. If Service level objectives widgets is chosen, SLO(target) is required as a parameter. On the other side, SLO target has already predefined by the SLO configuration from Service levels objectives (beta), no additional step is required to define the SLO target for calculation. Also, Service levels objectives (beta) provides more metrics and charts than Service level objectives widgets.

The image below shows how a dashboard looks like with metrics from Service levels objectives (beta) category

slo2_dashboard

The image below shows a dashboard looks like when choosing metrics from Service level objectives widgets category

slo_dashboard

Singlestat visualization

While using the "Singlestat" visualization an additional metric aggregation is selectable. For showing a correct SUM metric, configuration on two different places is needed:

  • on metric selection: "SUM" to adjust our mean calculated rollup values
  • on Singlestat configuation: "Total" to tell the panel to aggregate all given values

singlestat

Table visualization

While using the "Table" visualization an additional metric aggregation is selectable.

table

Use time shift option

The time shift option allows going back in different points of time for each query.

This new feature can be used to compare two identical queries while one shows the query's outcome of a day earlier.

time shift

Custom Granularity

This plugin also supports the ability to select different granularity values to provide a even deeper look into metrics.

Granularity Support

Aggregation support

Aggregate graphs on query level and choose to show everything or only the aggregated graph.

Aggregation Support

instana-grafana-datasource's People

Contributors

basti1302 avatar bripkens avatar chinmaygithub avatar codingfabian avatar dalje-et avatar dependabot[bot] avatar derveloper avatar jeroensoeters avatar lucasinstana avatar marbon avatar mathieu-figiel-ibm avatar pglombardo avatar sarathsgck12 avatar schmidtl avatar sophiaxu0424 avatar steveww avatar wiggzz avatar xpmatteo avatar yang-joseph avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

instana-grafana-datasource's Issues

Add functions like in prometheus/graphite

Hello Instana Team,

to be able to build graphs with multiple series, it is very useful to have functions to do arithmetic and aggregation on these data.

f.e.
aggregations: sum, min, max, stddev, stdvar, top
functions: delta, rate, timeShift

Thank you!

Call count (total) only consistent when rollup=1000

Instana datasource version: 1.0.1

Expected result: Singlestat widget displaying Call Count (Total) for a WebService

Result: Total calls for a period of time only works if queries use rollup=1000

Example:

  • Last 5 minutes (rollup 1000)
    screen shot 2018-04-09 at 15 48 46

  • Last 30 minutes (rollup 5000)
    screen shot 2018-04-09 at 15 49 06

  • Last 6 hours (rollup 60000)
    screen shot 2018-04-09 at 15 49 18

I think there's a factor missing (for rollup=1000 the factor is 1 so it is still consistent)

When multiplying the other results for the number of seconds: (385x5) and (360x60) the results are consistent.

Could you please check this? Thanks in advance!

Julia

unable to configure using provisioning yaml

I am trying to create docker image which will have preconfigured instana datasource. I am following this guide.

When I build and run my container it creates the datasource automatically but doesn't show the proper configuration, url and apiToken are always blank. My configuration yaml is as follows

datasources:
  - name: INSTANA-NONPROD
    type: instana-datasource
    access: proxy
    jsonData:
      apiToken: "<API_TOKEN>"
      canQueryOfflineSnapshots: false
      canUseProxy: true
      url: "<Instana URL>"
      useProxy: true
    editable: true

Screenshot 2020-05-06 at 9 49 34 PM

Add support of custom events in Analyze Websites

For the category Analyze Websites only the next types are supported - Pageloads, Resources, HTTP Requests, Errors.
But there is no support of the Custom Events which were logged in Instana with ineum('reportEvent').
Is there a possibility to add such support?
Thanks!

Replace dropdown for metrics selection with input field and autocompletion supporting wildcards

Hello Instana Team,

at the moment, we can only select one metric per query using the DropDown (which has a lot of metrics in our application).

Would it be possible to replace this with an input field having autocompletion?
Then, it would be possible to use wildcards to select more than one metric per query.

So in the end, it would be great to be able to have a multi selection like

some.metric.with.*.wildcard

Thank you!

Are Events exposed through the datasource?

I'd like to incorporate some information about events into a Grafana dashboard - eg overall number of open events, critical events count etc.

If I try to query with a Dynamic Focus that works in the Instana UI eg:

event.state:open

Grafana highlights the query box in red and the Query Inspector result is:

Object
xhrStatus:"complete"
request:Object
method:"GET"
url:"api/datasources/proxy/1/instana/api/snapshots/types?q=event.state%3Aopen&from=1567048248062&to=1567069848062"
response:Object
errors:Array[1]
0:"Failed to execute search. An unknown error occurred."

Are events exposed via the Grafana DS?

Treat field "API token" as password in "Data Sources/Settings"

I think it is interesting to have the field "API Token" in the settings of a Instana Data Source configured as password-field to prevent copying and reuse of the Token.

Of course this applies:

  • The Token is already visible in plain on the Instana-Server given you have the correct role
  • The Token only should have minimal permissions

Upgrade to Grafana v 10.x+ seems to break the edit mode for Panels with the Instana Datasource

Hi there,

when upgrading to Grafana v10x+, the creation of a Panel with the Instana Datasource still works as before.
The Panel is also shown correctly in the "viewer"-Mode of a Dashboard:
grafik

Although, after saving, reloading the page and then opening the "edit"-View of one panel, the values in the selectable fields are not prefilled anymore and the panel data is not rendered correctly.
If I now hit save, it breaks the configuration of the panel:
grafik
Potentially, this only happens with custom metrics, but I'm not 100% sure. Maybe you can try to replicate the issue.

EDIT: Another thing that seems to be broken with Grafana 10 is the proxy mode in the Instana plugin settings

Plugin Version: Latest
Grafana Version: Grafana v10.0.1 (5a30620b85)

Best regards

Daniel

Instana Pluging does not work

Sirs,

We are trying to be able to graph Instana metrics and we have not got a single graph.
We have tried several environments, Cloud, and local installation and the same error.
Every time we open the Instana DataSource, a huge error appears in a pop-up window that we cannot copy it and it disappears.
We move forward, we accept the connection and it tells us that it is successful.
When we want to build a graph, nothing appears in the filters: No types found with query
But we test by CURL command line and if they bring information.

LOG:
C%22,%5C%22showAdvancedSettings%5C%22:false,%5C%22hide%5C%22:false%7D%22%7D%5D" error="http: proxy error: context canceled"
t=2021-04-29T09:47:21-0400 lvl=eror msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/datasources/proxy/9/instana/api/instana/version status=502 remote_addr=192.168.0.6 time_ms=9 size=0 referer="http://192.168.0.13:3000/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Instana%22,%7B%22metricCategory%22:%7B%22label%22:%22Infrastructure%20built-in%20metrics%22,%22key%22:0%7D,%22timeShiftIsValid%22:true,%22customFilters%22:%5B%5D,%22aggregationFunction%22:%7B%22label%22:%22SUM%22%7D,%22metric%22:%7B%22key%22:null,%22label%22:%22-%22%7D,%22timeInterval%22:%7B%22key%22:%2260000%22,%22label%22:%221min%22%7D,%22showAdvancedSettings%22:false,%22hide%22:false,%22timeFilter%22:%7B%22from%22:1619700014000,%22to%22:1619703614000,%22windowSize%22:3600000%7D,%22stableHash%22:%22%7B%5C%22metricCategory%5C%22:0,%5C%22customFilters%5C%22:%5B%5D,%5C%22key%5C%22:%5C%22Q-e9dc8de5-d962-4634-ab4e-4f9f277c4de4-0%5C%22,%5C%22aggregationFunction%5C%22:%7B%5C%22label%5C%22:%5C%22SUM%5C%22%7D,%5C%22metric%5C%22:null,%5C%22timeInterval%5C%22:%5C%2260000%5C%22,%5C%22showAdvancedSettings%5C%22:false,%5C%22hide%5C%22:false%7D%22%7D%5D"
t=2021-04-29T09:47:43-0400 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/undefined/api/instana/version status=404 remote_addr=192.168.0.6 time_ms=3 size=34491 referer=http://192.168.0.13:3000/datasources/edit/10/
t=2021-04-29T09:52:02-0400 lvl=eror msg="Datasource has already been updated by someone else. Please reload and try again" logger=context userId=1 orgId=1 uname=admin error="trying to update old version of datasource" remote_addr=192.168.0.6
t=2021-04-29T09:52:02-0400 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=PUT path=/api/datasources/10 status=409 remote_addr=192.168.0.6 time_ms=1 size=94 referer=http://192.168.0.13:3000/datasources/edit/10/
t=2021-04-29T09:53:28-0400 lvl=eror msg="Datasource has already been updated by someone else. Please reload and try again" logger=context userId=1 orgId=1 uname=admin error="trying to update old version of datasource" remote_addr=192.168.0.6
t=2021-04-29T09:53:28-0400 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=PUT path=/api/datasources/10 status=409 remote_addr=192.168.0.6 time_ms=5 size=94 referer=http://192.168.0.13:3000/datasources/edit/10/
t=2021-04-29T09:53:36-0400 lvl=eror msg="Datasource has already been updated by someone else. Please reload and try again" logger=context userId=1 orgId=1 uname=admin error="trying to update old version of datasource" remote_addr=192.168.0.6
t=2021-04-29T09:53:36-0400 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=PUT path=/api/datasources/10 status=409 remote_addr=192.168.0.6 time_ms=4 size=94 referer=http://192.168.0.13:3000/datasources/edit/10/
t=2021-04-29T09:54:10-0400 lvl=eror msg="Datasource has already been updated by someone else. Please reload and try again" logger=context userId=1 orgId=1 uname=admin error="trying to update old version of datasource" remote_addr=192.168.0.6
t=2021-04-29T09:54:10-0400 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=PUT path=/api/datasources/10 status=409 remote_addr=192.168.0.6 time_ms=1 size=94 referer=http://192.168.0.13:3000/datasources/edit/10/
t=2021-04-29T09:54:26-0400 lvl=info msg=Requesting logger=data-proxy-log url=https://serverapm.instana.io/api/monitoringState
t=2021-04-29T09:54:35-0400 lvl=info msg=Requesting logger=data-proxy-log url=https://serverapm.instana.io/api/instana/version

What a disappointment, what a way to waste time with these solutions.

the latest version doesn't seem to work (2.7.1)

Hi there,

I'm not sure but a prefer to notify this as an Issue.

I noticed that last version has new field (call entity) into the category "Analyze Applications Calls"

Src - Dest (filters & group by). I don't why, but my metrics are receiving 504 HTTP CODE (without graphs).

This is ok?

Thanks.

Broken metrics

Hi There
Whenever I leave the metric-editor in a state where it cannot display a metric (error or incomplete)

image
The Metric in question cannot be edited or removed anymore. The only solution is to remove the panel containing the broken metric.
Please check

Version 4.1.0 does not apply Aliases in series name.

When creating an Instana datasource and defining an alias, this alias is not been used in the series names witrh the data:

image

This wont allow to map the data in the panels when trying to call the series by the defined alias.

Access Instana with self-signed certificate (or even none)

Hello,

I've installed Instana on a local machine without a CA-signed certificate. When I try to access it using the grafana datasource, I get the following error in the log:

http: proxy error: x509: certificate is not valid for any names, but wanted to match myserver.mydomain.com

I'm guessing that adding the option "Skip TLS Verify" (which exists in many datasources) would solve this problem.

Thanks for your consideration.

Implement Backend Plugin

Current Instana support is added via a normal Datasource Plugin. This works for the most part but has the limitation that the plugin can't take advantage of features like Alerting or Caching. For those, Instana's plugin need to implement a Backend Plugin.

If there's interest, I'd be willing to help implement this or provide feedback into an implementation.

Related: #66

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.